Security 除角色外,基于数据库的MVC页面级安全性

Security 除角色外,基于数据库的MVC页面级安全性,security,asp.net-mvc-4,Security,Asp.net Mvc 4,我使用[Authorize(Roles=“Administrator”)]等来控制对页面的访问,但除此之外,我的客户还需要更多。我们的用户可以创建子用户并确定他们可以访问哪些屏幕。例如,用户1可能表示子用户1可能会得到屏幕1-4,而不是屏幕5-8(为了简单起见,这里使用数字)。子用户2可能得到奇数屏幕,子用户得到偶数屏幕 这看起来不像是一个基于角色的安全问题。我打算创建一个屏幕,让用户选择一个子用户,然后进入另一个屏幕,每个屏幕都有复选框,并勾选子用户可以访问的屏幕。很简单 我的问题是,如何在应

我使用[Authorize(Roles=“Administrator”)]等来控制对页面的访问,但除此之外,我的客户还需要更多。我们的用户可以创建子用户并确定他们可以访问哪些屏幕。例如,用户1可能表示子用户1可能会得到屏幕1-4,而不是屏幕5-8(为了简单起见,这里使用数字)。子用户2可能得到奇数屏幕,子用户得到偶数屏幕

这看起来不像是一个基于角色的安全问题。我打算创建一个屏幕,让用户选择一个子用户,然后进入另一个屏幕,每个屏幕都有复选框,并勾选子用户可以访问的屏幕。很简单

我的问题是,如何在应用程序中实现这一点?显而易见的方法是,在每次get中,点击DB,输入用户名和屏幕ID,然后查看他们是否有访问权限。有没有更好的方法来避免在每页上都检查数据库?由于没有会话对象,我无法获取页面ID数组(仅一次),它们可以访问并将其存储在会话中

     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]