Авторизация asp.net: местоположение и IPrincipal.IsInRole - PullRequest
3 голосов
/ 25 февраля 2009

Сценарий

Я использую пользовательские IPrincipal и IIdentity для авторизации asp.net. Я установил Principal и Identity во время события PostAuthenticateRequest, используя IHttpModule.

Файл web.config выглядит примерно так:

<system.web>
  <authorization>
    <allow verbs="GET,POST" roles="domain\group"/>
    <deny verbs="*" users="*"/>
  </authorization>
</system.web>
<location path="~/admin/user_search.aspx">
  <system.web>
    <authorization>
      <allow verbs="GET,POST" roles="admin"/>
      <deny verbs="*" users="*"/>
    </authorization>
  </system.web>
</location>

Проблема

При выполнении запроса метод IPrincipal.IsInRole вызывается один раз для проверки domain\group, но не вызывается снова для проверки роли admin. Чем это вызвано? У меня неправильный синтаксис location или есть более глубокая проблема?

Примечания

Сначала я подумал, что web.config в каталоге admin переопределяет web.config в корневом каталоге, но я попытался удалить его полностью, а также использовать его для элемента location. Ни один из них не работал до сих пор.

1 Ответ

3 голосов
/ 25 февраля 2009

Не используйте тильду (~) в начале путей для элементов, поскольку они там не интерпретируются. В вашем примере, путь = "admin / user_search.aspx" должен быть правильным.

...