Действительно ли возможно указать, что несколько ролей требуются в элементе авторизации web.config файла? У меня в настоящее время есть этот блок в одном web.config моего сайта для определенного каталога:
<authorization>
<allow roles="Global, Region" />
<deny users="*" />
</authorization>
Я только что определил особый случай, где у человека с двумя полномочиями низшего уровня, чем Глобальный и регион должен также быть доступ к этому каталогу. Примерно, я хочу что-то вроде этого:
<authorization>
<allow roles="GlobalManager, RegionManager, SiteManager && FooSite" />
<deny users="*" />
</authorization>
Какие-либо идеи? Я понимаю, что у меня, вероятно, должна быть новая роль для этого сценария, но я хотел бы избежать этого.Спасибо!
Я не думаю, что вы можете сделать это с помощью текущих конфигураций, разрешенных в Интернете. .config. Однако вы могли бы сделать что-то вроде следующего ... в качестве самой первой строки в вашем событии Page_Load
для рассматриваемой страницы используйте следующий код (VB):
If Not (User.IsInRole("Role1") AndAlso User.IsInRole("Role2")) Then _
FormsAuthentication.RedirectToLoginPage()
Эта строка, конечно же, предполагая, что вы используете FormsAuthentication. В противном случае вам нужно будет заменить FormsAuthentication.RedirectToLoginPage ()
соответствующим кодом в зависимости от вашего метода аутентификации.
Я точно не знаю вашей ситуации, но, судя по вашему коду, похоже, что вы могли бы пойти еще дальше и добавить таблицу с сопоставлением пользователей с сайтами и сделать что-то вроде следующего:
В общедоступном модуле добавьте следующий код:
<System.Runtime.CompilerServices.Extension()> _
Public Function ManagesSite(target As System.Security.Principal.IPrincipal, siteName As String) As Boolean
Return [ code here to look up whether this user can access the site specified ]
End Function
Затем вы можете написать предыдущий код как что-то более логичное, например:
If Not (User.IsInRole("SiteManager") AndAlso User.ManagesSite(Request.Url.Host)) Then _
FormsAuthentication.RedirectToLoginPage()