正如问题所述,当在单个 Authorize() 呼叫中给出多个角色时,它们被应用,如果用户属于列出的任何角色,则他们将被授予访问权限;像一个逻辑 OR 运算符 .
或者,要实现逻辑 AND 运算符的效果,可以多次应用 Authorize 属性 . 例如..
[Authorize(Roles = "Producer")]
[Authorize(Roles = "Editor")]
public ActionResult Details(int id) {
// Only available to users who are Producers AND Editors
}
[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{
}
2 回答
正如问题所述,当在单个
Authorize()
呼叫中给出多个角色时,它们被应用,如果用户属于列出的任何角色,则他们将被授予访问权限;像一个逻辑OR
运算符 .或者,要实现逻辑
AND
运算符的效果,可以多次应用Authorize
属性 . 例如..对于上面的示例,只有属于
Producer
和Editor
角色的用户才能访问操作主体 .Rudi在评论中指出,这可以让您创建一些相当复杂的访问规则,而无需实现自定义
AuthorizeAttribute
. 例如,在下面的代码中,用户可以执行操作,如果它们是:a)在Enabled
角色中,b)在Editor
或Admin
角色中 .我不确定哪个版本带来了这个版本,但它至少适用于MVC 4和5 .
你应该做自定义
AuthorizeAttribute
演示: