【问题标题】:ASP.NET Custom Role provider: Role depending on the context?ASP.NET 自定义角色提供程序:角色取决于上下文?
【发布时间】:2012-01-18 14:12:36
【问题描述】:

我正在开始一个新项目,我有一个关于 ASP.Net MVC 3 的自定义角色提供程序的问题。

我需要对我的构造函数的几个动作进行角色验证,所以我说,好吧,我可以使用角色提供者。

问题是角色取决于当前的“上下文”:

事实上,我的数据库中的用户链接到几个“实体”,并且对于实体 X 具有角色“A”,对于实体 Y 具有角色 B。将显示/编辑的所有数据都是“孩子”这个实体的

严格分离:当我们登录时,我们必须选择要为哪个实体工作,然后,直到我们要求更改实体,我们将只有该实体的数据和该实体的权限。

当前的“实体”将存储在会话中。

目标是不让实体 X 获得未经授权的菜单/操作,因为用户 Y 允许此权限。

问题是在角色提供者中,我无法接收任何上下文,我只接收用户名。

那么你认为我能做什么?(如果有帮助,会员资格也是一个自定义会员资格提供者)。

【问题讨论】:

    标签: asp.net asp.net-mvc authorization membership-provider roleprovider


    【解决方案1】:

    要阻止对这些特定页面的访问,您可以在操作上实施 RoleManagementFilter。这将只允许员工角色、管理员角色的用户访问特定页面。

    [RequiresEmployeeRole(Route = "Account", Action = "LogOn", Order = 1)]
    Public ActionResult EmployeeSettings(){
        return View();
    }
    

    ActionFilter 所做的是基于请求页面的用户的角色将他们重定向到您设置的路由和操作 Route = "Account", Action = "LogOn" 或允许他们进入。

    下面是 ActionFilterAttribute 的一部分。

    public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string[] roles = Roles.GetRolesForUser();
            string userrole = "";
    
            if (roles.Length > 0)
                userrole = roles[0];
    
            if (Regex.IsMatch(userrole, Role))
                filterContext.HttpContext.Response.Redirect(redirectUrl(), true);
        }
    

    我不知道您拥有多少实体,以及它是否可行,但如果您要为每个实体创建角色,请将用户附加到这些角色,然后您可以将您的限制基于操作,如果用户是在 Roles.GetRolesForUser();

    我发现一篇 MSDN 文章反应过滤器http://msdn.microsoft.com/en-us/magazine/gg232768.aspx 可能会有所帮助。有很多例子希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-04
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 2014-10-15
      • 1970-01-01
      • 2011-05-23
      相关资源
      最近更新 更多