1

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

这看起来不像是基于角色的安全性。我打算为用户创建一个屏幕来选择一个子用户,然后进入另一个屏幕,每个屏幕都有复选框,并检查子用户可以访问的那些。很容易。

我的问题是,如何在应用程序中强制执行?显而易见的方法是,在每次获取时,点击数据库,传递该用户名和该屏幕的 ID,然后查看他们是否有权访问。有没有更好的方法来避免在每一页上为该检查点击数据库?由于没有会话对象,我无法获得他们可以访问的页面 ID 数组(仅一次)并将其存储在会话中。

4

1 回答 1

0
     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]

于 2013-05-16T14:39:12.597 回答