ASP.为用户授权多个角色

本文关键字:角色 授权 用户 ASP | 更新日期: 2023-09-27 18:13:03

我需要授权一个控制器在我的ASP。NET MVC应用程序,其中有两个角色的用户。我像这样使用授权属性:

[authorization (Roles = "Producer, Editor")]

但是这允许生产者和编辑器使用控制器。我只允许用户同时拥有两个角色,而不是其中一个。

我怎么能做到这一点?

ASP.为用户授权多个角色

如问题所述,当多个角色单个 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中工作

您应该自定义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{
}