Я пытался обдумать этот ответ и не могу найти хорошее решение о том, как правильно это сделать.
Я прочитал эти статьи :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 * Идентификатор отдела не обязательно должен кэшироваться, поэтому, возможно, я смогу сделать это на уровне контроллера.