Mat*_*att 13 asp.net forms-authentication web-config
我在允许特定角色访问子目录中的特定页面时遇到问题.
我的ASP.NET应用程序有一个目录,〜/ Forms/Administration具有有限的访问权限.有一个特定的文件,〜/ Forms/Administration/Default.aspx,我想给予1个额外的用户角色访问权限,以及Admin角色.
在〜/ Forms/Administration中,我有一个web.config文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="Administrator, User" />
<deny users="*"/>
</authorization>
</system.web>
<location path="Forms/Administration/Default.aspx">
<system.web>
<authorization>
<allow roles="Administrator, User, AdditionalUser" />
</authorization>
</system.web>
</location>
</configuration>
Run Code Online (Sandbox Code Playgroud)
Admin用户工作正常,但AdditionalUser总是失败.我尝试了很多东西 - 将位置列为
<location path="Forms/Administration/Default.aspx">
Run Code Online (Sandbox Code Playgroud)
并作为
<location path="~/Forms/Administration/Default.aspx">
Run Code Online (Sandbox Code Playgroud)
来自第一个通用规则的deny ="*"是先例吗?我试过改变
<deny users="*"/>
Run Code Online (Sandbox Code Playgroud)
至
<deny users="?"/>
Run Code Online (Sandbox Code Playgroud)
但最终会让ExtraUser访问所有内容.建议?
编辑:我尝试在通用拒绝规则之前放置位置特定允许,以防顺序重要.同样的问题.
更新:我在这里显然遗漏了一些东西:我删除了deny*config,只留下了特定位置的部分.然后,我没有允许某些角色,而是将其设置为拒绝全部(*).但是,当我登录时,它并没有否认我.我甚至将规则简化为不是文件特定的,但适用于整个目录,并且它不会拒绝任何东西.但是,原始的非位置特定规则确实有效,因此我知道正在读取此配置文件.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="Forms/Administration">
<system.web>
<authorization>
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
Run Code Online (Sandbox Code Playgroud)
Chr*_*tis 20
两件事情:
该位置是相对于web.config文件的,因此如果您的web.config已经在/ Forms/Administration中,则应将其更正为:
<location path="Default.aspx">
<system.web>
<authorization>
<allow roles="Administrator, User, AdditionalUser" />
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)为了澄清允许和拒绝的顺序,授权将根据它找到的第一个匹配来应用,因此顺序非常重要.例如:
<deny users="*" />
<allow users="Administrator" />
Run Code Online (Sandbox Code Playgroud)管理员将被拒绝,因为它与第一个拒绝条目匹配...即使您指定允许管理员用户在下一行.因此,只允许管理员,正确的语法是:
<allow users="Administrator" />
<deny users="*" />
Run Code Online (Sandbox Code Playgroud)
综上所述
如果我正在阅读您想要的内容,这可能是您想要的最终产品:
<configuration>
<system.web>
<authorization>
<allow roles="Administrator, User" />
<deny users="*"/>
</authorization>
</system.web>
<location path="Default.aspx">
<system.web>
<authorization>
<allow roles="AdditionalUser" />
</authorization>
</system.web>
</location>
</configuration>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28884 次 |
| 最近记录: |