asp.net Упълномощаване: местоположение и IPrincipal.IsInRole

Сценарий

Използвам персонализирани 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 в администраторската директория замества web.config в основната директория, но се опитах да го премахна напълно, както и да го използвам за елемента location. Нито един от тях не е работил досега.


person brad    schedule 24.02.2009    source източник


Отговори (1)


Не използвайте тилда (~) в началото на пътеките за ‹location> елементи, тъй като те не се интерпретират там. Във вашия пример path="admin/user_search.aspx" трябва да е правилен.

person Sam    schedule 24.02.2009