Требование нескольких ролей в авторизации Web.config

Действительно ли возможно указать, что несколько ролей требуются в элементе авторизации web.config файла? У меня в настоящее время есть этот блок в одном web.config моего сайта для определенного каталога:

<authorization>  
    <allow roles="Global, Region" />
    <deny users="*" />
</authorization>

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

<authorization>  
    <allow roles="GlobalManager, RegionManager, SiteManager && FooSite" />
    <deny users="*" />
</authorization>

Какие-либо идеи? Я понимаю, что у меня, вероятно, должна быть новая роль для этого сценария, но я хотел бы избежать этого.Спасибо!

8
задан Derek Morrison 29 April 2010 в 15:01
поделиться

1 ответ

Я не думаю, что вы можете сделать это с помощью текущих конфигураций, разрешенных в Интернете. .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()
3
ответ дан 5 December 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: