asp.net授权:location和IPrincipal.IsInRole

时间:2009-02-24 23:08:21

标签: asp.net security web-config authorization

方案

我正在使用自定义IPrincipalIIdentity来执行asp.net授权。我使用PrincipalIdentity活动期间设置了PostAuthenticateRequestIHttpModule

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语法是否不正确或是否存在更深层次的问题?

备注

我最初认为admin目录中的web.config覆盖了根目录中的web.config,但我已经尝试将其完全删除,并将其用于location元素。到目前为止都没有工作过。

1 个答案:

答案 0 :(得分:3)

请勿在&lt; location&gt;的路径开头使用波浪号(〜)。元素,因为它们没有被解释。在您的示例中,path =“admin / user_search.aspx”应该是正确的。