Я пытался придумать этот ответ через и не могу найти хорошего решения, как правильно это сделать.
Я прочитал эти статьи :
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
Настраиваемый атрибут авторизации, дополнительный параметр?
Думаете, что последний из них близок.
Сценарий:
Итак, в контроллере, как я могу сказать, что пользователь имеет доступ к действию, если я не знаю, какие роли создал администратор пользователя?
Итак, по логике ... скажем, у меня есть задача Контроллер с помощью «Создать», «Подробности». В Задаче есть отдел «Одежда».
. Администратор добавил бы новую роль под названием "Пользователи задач" и сказал бы, что эта роль может "Создавать задачи"
{{1 }} Администратор также разрешит этой роли «Просмотр сведений о задаче»
Администратор включит «Безопасность на уровне отдела»
Создание:
Когда на контроллере вызывается создание задачи. Мне нужно убедиться, что пользователь находится в роли, которая позволяет «Создать задачу». Поэтому по умолчанию я не могу отправить разрешенные «роли» в атрибут авторизации, потому что я их не знаю. Мне как-то нужно отправить все роли, которые есть у пользователя, и посмотреть, есть ли у роли доступ к «Создание задач»
Просмотр с помощью службы безопасности отдела:
Когда другой пользователь переходит для просмотра этой задачи, он может иметь доступ к «Просмотр подробностей задачи» (что я могу понять, но решаю первую проблему). Однако, поскольку Задача предназначена для другого отдела, отличного от того, в котором они находятся, мне нужно запретить доступ. Пользователь может только «Просмотреть подробности задачи», если задача является частью одного из отделов, в котором находится пользователь.
Это то, что я не могу понять. Как правильно расширить AuthorizeAttribute, чтобы я мог отправить список ролей через GerRolesForUser, поскольку он принимает только строку, и как определить, для какого действия он предназначен, а затем ограничить безопасность на другом уровне, проверив идентификатор отдела.
Идентификатор отдела не обязательно кэшировать, так что, возможно, я смогу сделать это на уровне контроллера.