我使用Authorize(Roles = "Administrator")等来控制对页面的访问,但除此之外,我的客户想要更多。我们有一些用户可以创建SubUsers并确定他们可以访问哪些屏幕。例如,用户1可能表示SubUser 1可能显示屏幕1-4,而不是5-8 (为简单起见,此处使用数字)。SubUser 2可能会得到奇数屏幕,而SubUser可能会得到偶数屏幕。
这看起来不像是基于角色的安全问题。我打算创建一个供用户选择SubUser的屏幕,然后转到另一个屏幕,每个屏幕上都有复选框,并勾选SubUser可以访问的那些。很简单。
我的问题是,如何在应用程序中执行这一点?最明显的方法是,在每次get时,访问数据库,传入用户名和该屏幕的ID,并查看它们是否具有访问权限。有没有更好的方法,避免在每个页面上都使用数据库进行检查?因为没有session对象,所以我无法获得他们可以访问的页面in数组(只有一次)并将其存储在session中。
发布于 2013-05-16 22:39:13
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]
https://stackoverflow.com/questions/16589123
复制相似问题