Этот вопрос действительно относится к любому веб-сайту или корпоративной системе, где одному пользователю может быть назначено несколько ролей.На сайте ASP.NET следует назначить администраторам несколько ролей?
В идентификаторе ASP.NET у вас есть IdentityUser
и IdentityRole
, где пользователь может иметь 0 или более ролей. действия контроллера затем защищены [Authorize(Roles = "roleName")]
Учитывая простую концептуальную систему, которая имеет 3 простых роли:
Administrator
Manager
User
... простой админ типа пользователь, который должен иметь доступ ко всем действиям контроллера:
JoeAdmin
И следующий контроллер образец Web API:
public IHttpActionResult GetForUsersAndAbove()
{
//
}
public IHttpActionResult GetForAdminsOnly()
{
//
}
Если система будет разработана таким образом, что:
- JoeAdmin быть назначен только один - роль администратора или
- JoeAdmin быть назначен администратор, менеджер и пользователя?
Мотивация в том, чтобы спросить об этом, когда дело доходит до авторизации действий контроллера. Если JoeAdmin только назначена роль администратора, а затем на основе следующих атрибутов авторизации он не сможет получить доступ к GetForUsersAndAbove()
, потому что он не является членом роли пользователя
[Authorize(Roles = "User")]
public IHttpActionResult GetForUsersAndAbove()
...
[Authorize(Roles = "Administrator")]
public IHttpActionResult GetForAdminsOnly()
...
Итак, вопрос, должен GetForUsersAndAbove()
быть украшенный
[Authorize(Roles = "User, Manager, Administrator")]
чтобы у него есть доступ к нему? ИЛИ
Если система должна назначить JoeAdmin по существу все роли так, что он может получить доступ ко всем методам контроллера, даже если они помечены [Authorize(Roles = "User")]
?
EDIT
Если я использую следующее соглашение для действий контроллера
[Authorize(Roles = "User")]
public IHttpActionResult GetForUsers()
И ожидать, что если JoeAdmin должен иметь доступ этот метод, он также должен быть членом User
роли, это приводит к проблема пользовательского интерфейса на воображаемом экране управления пользователями:
Вот сценарий: вы новый пользователь системы, учитывая ответственность за управление пользователями. Вы добавляете нового пользователя JaneAdmin
с намерением иметь полный/неограниченный доступ к системе. Вам предлагаются 3 флажка: Administrator
, Manager
и User
. Без документации, которая проведет вас, какие флажки у вас есть? Если я поставил себя на ту обувь пользователя, я бы интуитивно просто пометил «Администратор», ожидая, что он обеспечит полный доступ. Я также могу представить разочарование, когда JaneAdmin считает, что она заблокирована из простых операций на уровне пользователя.Таким образом, пользовательский интерфейс требовал, чтобы все 3 флажка были отмечены галочкой ..., которые удовлетворяют авторизационному аспекту системы, но создают плохой пользовательский интерфейс.
Итак, как обычно можно справиться с этой проблемой?
Спасибо. Ваш второй пункт имеет большой смысл. По вашей рекомендации, пожалуйста, см. Мой EDIT в вопросе. – BCA
@BCA см. Мое обновление – trailmax
Мне никогда не приходило в голову, что это возможно - спасибо – BCA