我正在构建一个动态导航控件,该控件根据用户被授权在web.config中查看的页面来切换导航元素的可见性。
要确定是否允许用户访问页面,我使用CheckUrlAccessForPrincipal方法并为整个目录设置授权规则。
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="demo\Administrators"/>
<deny users="*" />
</authorization>
</system.web>
</configuration>
这按预期工作,当当前用户不在Administrators组中时,CheckUrlAccessForPrincipal对于包含web.config-file的目录中的所有页面返回false。
现在,我想在这样的页面级别上设置授权规则。
<?xml version="1.0"?>
<configuration>
<location path="DemoPage.aspx">
<system.web>
<authorization>
<allow roles="demo\SomeDifferentGroup"/>
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
如果我现在检查是否允许用户访问DemoPage,则无论当前用户是否在SomeDifferentGroup中,CheckUrlAccessForPrincipal都将返回true。
我向您保证配置正确。访问未经当前用户授权的页面将打开Windows身份验证,并提示用户提供有效的凭据。
有什么想法会导致行为根据在目录或文件夹级别上设置的授权规则而有所不同?
答案 0 :(得分:0)
好吧,经过2天的挖掘,我终于找到了答案。 显然,某些ASP.NET项目在URL中省略了.aspx文件结尾。
如果现在要使用缺少.aspx结尾的URL调用CheckUrlAccessForPrincipal方法,则该方法将以某种方式无法正确识别该URL是页面,并且无法正确检查web.config授权规则。
手动将文件结尾添加到URL已解决了该问题。