2013-05-16 37 views
1

我正在使用[授权(角色=“管理员”)]等来控制对页面的访问,但除此之外,我的客户想要更多。我们有用户可以创建SubUser并确定他们可以访问的屏幕。例如,用户1可能指示SubUser 1可能会获得屏幕1-4,但不会获得5-8(这里为了简单起见,使用数字)。 SubUser 2可能会出现奇怪的画面,SubUser会得到偶数画面。基于DB的MVC页面级安全除了角色

这似乎不是一个基于角色的安全事物。我要为用户创建一个屏幕来选择一个SubUser,然后进入另一个屏幕,每个屏幕都带有复选框,并检查SubUser可以访问的屏幕。很简单。

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

回答

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]