我正在构建一个动态导航控件,它根据用户有权在 web.config 中查看哪些页面来切换导航中元素的可见性。
要了解是否允许用户访问页面,我使用 CheckUrlAccessForPrincipal方法并像这样为整个目录设置授权规则。
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="demo\Administrators"/>
<deny users="*" />
</authorization>
</system.web>
</configuration>
这按预期工作,当当前用户不在管理员组中时,CheckUrlAccessForPrincipal 对包含 web.config 文件的目录中的所有页面返回 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,CheckUrlAccessForPrincipal 返回 true,无论当前用户是否在 SomeDifferentGroup 中。
我已经确定配置是正确的。访问当前用户未获得授权的页面会打开 Windows 身份验证并提示用户提供有效凭据。
是否知道行为因授权规则是在目录级别还是文件夹级别设置而有所不同?
最佳答案
好的,经过 2 天的挖掘,我终于找到了答案。 显然,一些 ASP.NET 项目省略了 URL 中的 .aspx 文件结尾。
如果现在使用缺少 .aspx 结尾的 URL 调用 CheckUrlAccessForPrincipal 方法,该方法将无法正确识别该 URL 是一个页面,并且无法正确检查 web.config 授权规则。
手动将文件结尾添加到 URL 已解决该问题。
关于asp.net - 为什么在页面级别撤销授权后 CheckUrlAccessForPrincipal 仍然返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64156499/