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

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

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

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

我怎么能得到这个?

正如问题所述,当在单个 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{ }