我有一个问题允许特定角色访问子目录中的特定页面.
我的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>
管理员用户工作正常,但AdditionalUser始终失败.我已经尝试了许多事情 – 将位置列为
<location path="Forms/Administration/Default.aspx">
并作为
<location path="~/Forms/Administration/Default.aspx">
来自第一个普遍规则的deny =“*”是先例吗?我试过改变
<deny users="*"/>
至
<deny users="?"/>
但是最终可以让AdditionalUser访问所有内容.建议?
编辑:我试图把位置特定的允许在通用拒绝规则之前,以防止顺序重要.同样的问题.
更新:我显然在这里遗漏了一些东西:我删除了deny * config,只留下了特定于位置的部分.那么,而不是允许某些角色,我设置一个拒绝所有(*).但是,当我登录时,根本不会否认我.我甚至将规则缩小为不具体的文件,但适用于整个目录,并不代表我任何东西.然而,原始的非定位特定规则做的工作,所以我知道这个配置文件正在被读取.
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="Forms/Administration"> <system.web> <authorization> <deny users="*" /> </authorization> </system.web> </location> </configuration>
解决方法
两件事情:
>该位置是相对于web.config文件,所以如果您的web.config已经在/ Forms /管理它应该被更正为:
<location path="Default.aspx"> <system.web> <authorization> <allow roles="Administrator,AdditionalUser" /> </authorization> </system.web> </location>
>为了澄清允许和拒绝的顺序,授权将根据其找到的第一个匹配应用,因此顺序非常重要.例如:
<deny users="*" /> <allow users="Administrator" />
管理员将被拒绝,因为它匹配第一个拒绝条目…即使您指定允许管理员用户在下一行.所以只允许管理员,正确的语法是:
<allow users="Administrator" /> <deny users="*" />
综上所述
如果我正在阅读你想要的内容,这可能是你想要的最终产品:
<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>