2011-06-30 118 views
1

我试图保护(子)目录在我的ASP.NET网站,其中包含文件(视频,文档等),所以我创建了一个Web.config文件:ASP.NET授权继承规则

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <authorization> 
     <deny users="?"/> 
     <allow roles="Administrator"/> 
     <allow roles="Author"/> 
     <allow roles="Report"/> 
    </authorization> 
    </system.web> 
</configuration> 

这些角色与我的数据库中的asp.net角色表中定义的角色相对应。

我打开IIS7来检查授权规则是否存在。但也有2个被设置为“允许所有用户”的继承规则。这些规则似乎覆盖了我在de.Web.config中设置的规则。我无法删除这些继承的规则。

有没有什么方法可以禁用这些继承的授权规则,仅限于我的子文件夹?

在此先感谢!

+0

我似乎得到这与从IIS7管理器设置IIS授权规则,而不是使用ASP.NET授权规则。让我再来一些。 –

+0

你可能已经想通了,但即使你有一个继承的允许规则,它总是可以被子目录中的拒绝规则覆盖。查看我的答案以获取详细信息。 – Chiramisu

回答

1

在你的根目录下的web.config中尝试以下

<location path=”MySite/SubDirectory” allowOverride=”false”> 
    <system.web> 
     <authorization> 
      <allow users=”?” /> 
     </authorization> 
    </system.web> 
</location> 
+0

感谢您的回复!但是这并没有出现在我的IIS7控制面板或似乎工作。我认为这仍然不会覆盖继承权利。 –

+0

好吧,我认为这可能会帮助你 –

0

尝试从ASP.NET配置中删除。使用解决方案资源管理器(或Project \ Website-> ASP.NET配置)的右下角的小图标打开它。

在ASP.NET配置中,使用安全性 - >访问规则 - >管理相应文件夹的访问规则。

+0

感谢您的回应,继承的规则显示出来。我也可以添加自己的规则,但不能设置顺序。继承的规则总是最后被应用的。 –

+1

在默认“全部允许”规则之前放置拒绝全部规则。 – Kirill

+0

拒绝所有之前允许所有是唯一的路线为我工作。即使从顶级网站删除规则也没有将继承的规则取出。 – Andiih

0

牛逼

是的,你可以通过IIS管理器中使用.NET授权规则正如你所说添加这些授权,或在web.config文件中。但是请记住,您必须在“拒绝”规则之前添加“允许”规则,因为拒绝总是覆盖相同的文件夹级别。优先顺序为:

Local Deny - being top priority 
Local Allow 
Inherited Deny 
Inherited Allow 

如果没有允许规则将被应用在同一文件夹级别的任何其他地方允许规则之前存在的本地拒绝规则。例如,如果我有一个父目录Sales,子文件夹Management,CustomersSalesTeam并且我为Sales定义了拒绝规则,则必须明确允许所有用户/角色在子目录中。假设我也有与这些文件夹相匹配的角色,我将为每个文件夹定义一个允许规则,让他们访问其中的内容/页面。

我希望你觉得这个很有用。我知道这是一个古老的问题。干杯;)