Как далеко можно «детализировать» роли в приложении .NET MVC? - PullRequest
5 голосов
/ 29 июня 2011

Я написал несколько сложных приложений MVC, которые основаны на ролях и используют членство .NET. В моем первом проекте я использовал роли со структурой, подобной этой:

  • Администратор * * 1004
  • Менеджер
  • утверждающий

Я быстро обнаружил, что это не очень масштабируемо, например, клиент сказал бы: «Я хочу, чтобы конкретный пользователь x имел все права администратора, но не delete». Затем мне пришлось бы поставить взломать контроллер для этого пользователя.

Поэтому моя вторая реализация привела к такой структуре ролей:

  • CanCreate
  • CanDelete
  • CanEditAll
  • CanEditOwn

Этот подход затем привел к буквально десяткам ролей в зависимости от того, могут ли они редактировать определенные элементы глобально или только свои собственные и т. Д. Это также приводит к гораздо большему количеству действий контроллера и значительно большему количеству кода - хотя, возможно, это и будет просто дело в сложном приложении!

У меня вопрос: правильно ли я подхожу к этому, и есть ли хорошие онлайн-ресурсы о «правильном» подходе к сложным приложениям с множеством ролей. Я правильно это делаю?

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Действительно, это очень интересная тема, и я столкнулся с теми же проблемами, что и вы.

Я прочитал интересный блог Дерика Бэйлиса об этом " Не делайте проверки авторизации на основе ролей;Проверки, основанные на действиях": http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/

, но у него не было времени, чтобы проверить его самостоятельно.

1 голос
/ 05 октября 2012

Через год после этого вопроса я по-разному отношусь к проектам.Сейчас я придерживаюсь классических ролей:

  • Вид
  • Редактировать
  • Удалить
  • Добавить

НО сами методы действия возвращают данные следующим образом:

var order = or.MyVisibleOrders().FirstOrDefault(x => x.Id == Id);

Логика того, что можно просматривать, а что нет, обрабатывается ролями в хранилище.По сути, база данных никогда не будет запрошена для ограниченных элементов.

Базовые вещи, но я чувствовал, что должен следить за собой.

...