ASP.NET Forms Auth当所有其他应该被拒绝时,允许访问子目录中的特定文件

前端之家收集整理的这篇文章主要介绍了ASP.NET Forms Auth当所有其他应该被拒绝时,允许访问子目录中的特定文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题允许特定角色访问子目录中的特定页面.

我的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>

猜你在找的asp.Net相关文章