Ответ 1
Как говорится в вопросе, когда несколько ролей передаются в одном вызове Authorize()
, они применяются таким образом, что если пользователь принадлежит к любой из перечисленных ролей, им будет предоставлен доступ; как логический оператор OR
.
В качестве альтернативы для достижения эффекта логического оператора AND
вы можете применять атрибут Authorize
несколько раз. Например..
[Authorize(Roles = "Producer")]
[Authorize(Roles = "Editor")]
public ActionResult Details(int id) {
// Only available to users who are Producers AND Editors
}
В приведенном выше примере тело действия доступно только пользователям, принадлежащим к ролям Producer
и Editor
.
Rudi указывает в комментариях, что позволяет вам создавать некоторые достаточно сложные правила доступа, не требуя реализации пользовательского AuthorizeAttribute
. Например, в приведенном ниже коде пользователи могут выполнить действие, если они оба: a) в роли Enabled
и b) в ролях Editor
или Admin
.
[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.