首页 文章

ASP.NET MVC授权具有许多角色的用户

提问于
浏览
15

我需要在我的ASP.NET MVC应用程序中向具有两个角色的用户授权Controller . 我正在使用这样的Authorize属性:

[授权(角色=“制片人,编辑”)]

但这允许 生产环境 者和编辑到控制器 . 我只希望允许用户同时拥有这两种角色,而不仅仅是其中之一 .

我怎么能得到这个?

2 回答

  • 9

    正如问题所述,当在单个 Authorize() 呼叫中给出多个角色时,它们被应用,如果用户属于列出的任何角色,则他们将被授予访问权限;像一个逻辑 OR 运算符 .

    或者,要实现逻辑 AND 运算符的效果,可以多次应用 Authorize 属性 . 例如..

    [Authorize(Roles = "Producer")]
    [Authorize(Roles = "Editor")]
    public ActionResult Details(int id) {
        // Only available to users who are Producers AND Editors
    }
    

    对于上面的示例,只有属于 ProducerEditor 角色的用户才能访问操作主体 .

    Rudi在评论中指出,这可以让您创建一些相当复杂的访问规则,而无需实现自定义 AuthorizeAttribute . 例如,在下面的代码中,用户可以执行操作,如果它们是:a)在 Enabled 角色中,b)在 EditorAdmin 角色中 .

    [Authorize(Roles = "Enabled")]
    [Authorize(Roles = "Editor,Admin")]
    public ActionResult Details(int id) {
        // Only available to users who are Enabled AND either an Admin OR an Editor
    }
    

    我不确定哪个版本带来了这个版本,但它至少适用于MVC 4和5 .

  • 19

    你应该做自定义 AuthorizeAttribute

    public class AuthorizeMultipleAttribute : AuthorizeAttribute
    {
    
       //Authorize multiple roles
       public string MultipleRoles { get; set; }
    
      protected override bool AuthorizeCore(HttpContextBase httpContext)
      {
          var isAuthorized = base.AuthorizeCore(httpContext);
          if (!isAuthorized)
          {                
            return false;
          }
    
          //Logic here
          //Note: Make a split on MultipleRoles, by ','
          //User is in both roles => return true, else return false
      }
    
    }
    

    演示:

    [AuthorizeMultiple(MultipleRoles ="Role1,Role2")]
    public class UserController{
    }
    

相关问题