Security 除角色外,基于数据库的MVC页面级安全性
我使用[Authorize(Roles=“Administrator”)]等来控制对页面的访问,但除此之外,我的客户还需要更多。我们的用户可以创建子用户并确定他们可以访问哪些屏幕。例如,用户1可能表示子用户1可能会得到屏幕1-4,而不是屏幕5-8(为了简单起见,这里使用数字)。子用户2可能得到奇数屏幕,子用户得到偶数屏幕 这看起来不像是一个基于角色的安全问题。我打算创建一个屏幕,让用户选择一个子用户,然后进入另一个屏幕,每个屏幕都有复选框,并勾选子用户可以访问的屏幕。很简单 我的问题是,如何在应用程序中实现这一点?显而易见的方法是,在每次get中,点击DB,输入用户名和屏幕ID,然后查看他们是否有访问权限。有没有更好的方法来避免在每页上都检查数据库?由于没有会话对象,我无法获取页面ID数组(仅一次),它们可以访问并将其存储在会话中Security 除角色外,基于数据库的MVC页面级安全性,security,asp.net-mvc-4,Security,Asp.net Mvc 4,我使用[Authorize(Roles=“Administrator”)]等来控制对页面的访问,但除此之外,我的客户还需要更多。我们的用户可以创建子用户并确定他们可以访问哪些屏幕。例如,用户1可能表示子用户1可能会得到屏幕1-4,而不是屏幕5-8(为了简单起见,这里使用数字)。子用户2可能得到奇数屏幕,子用户得到偶数屏幕 这看起来不像是一个基于角色的安全问题。我打算创建一个屏幕,让用户选择一个子用户,然后进入另一个屏幕,每个屏幕都有复选框,并勾选子用户可以访问的屏幕。很简单 我的问题是,如何在应
public class ServiceCheckAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// check user role
// Check if user has access to this action/page
if (userHasAccess)
{
base.OnActionExecuting(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
}
}
}
在需要检查用户可访问性的每个控制器上添加此属性[ServiceCheckAttribute]