Как расширить / спроектировать атрибут авторизации ASP.NET MVC 3 для обработки этого сценария - PullRequest
10 голосов
/ 26 февраля 2011

Я пытался обдумать этот ответ и не могу найти хорошее решение о том, как правильно это сделать.

Я прочитал эти статьи :http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/
http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx
Пользовательская авторизация ASP.NET MVC http://davidhayden.com/blog/dave/archive/2009/04/09/CustomAuthorizationASPNETMVCFrameworkAuthorizeAttribute.aspx
Настраиваемый атрибут авторизации Дополнительный параметр?

Думая, может быть, последний близок.

Сценарий:

  • Создание ролей пользователя
  • Пользователь может назначить то, к чему у Роли есть доступ.
  • Пользователь добавляет пользователей к этим ролям
  • Пользователи также являются частью Департамента.

Итак, как в контроллере сказать, что у пользователя есть доступ к действию, поскольку я не знаю, какие роли создал администратор пользователя?

Так что по логике... допустим, у меня есть контроллер задач с надписью «Создать», «Детали».Задача имеет отдел "Одежда".

  • Задача:- TaskID- TaskTitle- TaskDepartmentID
  • - Пользователь:- Имя пользователя- роли- ОтделыЯ бы как-то связал действие «Создать» со способностью «Создать задачу»Я бы как-то связал действие «Подробности» со способностью «Просмотр деталей задачи»

Администратор добавил бы новую роль под названием «Пользователи задач» и сказал, что эта роль может «создавать задачи».Администратор также разрешил бы этой роли «Просмотреть детали задачи»Администратор включит «Безопасность уровня отдела» Создание: Когда на контроллере вызывается «Создать задачу», мне нужно убедиться, что пользователь находится в роли, которая разрешает «Создать задачу».Поэтому по умолчанию я не могу отправить «Роли», разрешенные в Атрибут Авторизации, потому что я их не знаю.Мне как-то нужно отправить все роли, которые есть у пользователя, и посмотреть, есть ли у роли доступ к «Создать задачи». Просмотр с отделом безопасности: Когда другой пользователь отправляется для просмотра этой задачи, он может иметь доступ к «Просмотр сведений о задаче» (что я могу выяснить, однако я решаю первую проблему).Однако, поскольку Задача предназначена для другого отдела, а не для того, в котором они находятся, мне нужно запретить доступ.Пользователь может только «Просмотреть детали задачи», если эта задача является частью одного из отделов, в которых находится пользователь.Это то, что я не могу понять.Как правильно расширить атрибут AuthorizeAttribute, чтобы я мог отправить список ролей через GerRolesForUser, поскольку он принимает только строку, и как определить, для чего это действие, и затем ограничить безопасность на другом уровне, проверив идентификатор отдела.1048 * Идентификатор отдела не обязательно должен кэшироваться, поэтому, возможно, я смогу сделать это на уровне контроллера.

Ответы [ 2 ]

1 голос
/ 02 июня 2011

У меня была несколько похожая проблема, и я не использовал атрибут Authorize.

Вместо этого я решил взять другой макет -2 для другого пользователя.

, если пользователь является администратором, тоон перейдет к другому представлению, и если пользователь является гостем, он перейдет к другому представлению через другой макет.

1 голос
/ 26 февраля 2011

У меня была похожая проблема, и я не использовал атрибут Authorize.

Вместо этого я решил расширить класс Controller и переопределить реализацию OnActionExecuting. Тогда в моей реализации я мог выполнять все проверки, например, к какому пользователю отдела принадлежал и достаточно ли он хорош, чтобы видеть данные других отделов. Посмотрите, работает ли этот подход для вас.

...