我正在使用库存的 MS Forms Authentication 和 SqlRolesProvider 开发在 IIS7(Server '08)上运行的 ASP.NET 3.5 应用程序。(我使用aspnet_regsql工具生成表)。
我们有三个角色:系统管理员、应用管理员和用户。所有用户都在用户中,一个用户可以在 SysAdmins、AppAdmins 或两者中。
我似乎无法获得一个管理员目录来阻止对不在 SysAdmins 和 AppAdmins 中的用户的访问。要么让所有登录用户进入,要么不让任何人进入。
以下是我当前配置的相关位:
<configuration>
...
<system.web>
<authentication mode="Forms">
<forms loginUrl="/client/security/login.aspx" timeout="480" />
</authentication>
<authorization>
</authorization>
<roleManager defaultProvider="SqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName="EquityTouch.Roles" cookieProtection="All" cookieSlidingExpiration="true" cookieTimeout="60">
<providers>
<clear />
<add name="SqlRoleProvider" applicationName="EquityTouch" connectionStringName="SQLProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
...
</system.web>
<system.webServer>
<security>
<authorization>
<add accessType="Deny" users="?" />
</authorization>
</security>
...
</system.webServer>
<location path="admin">
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs=""/>
<add accessType="Allow" roles="SysAdmins,AppAdmins" />
</authorization>
</security>
</system.webServer>
<system.web>
<authorization>
<deny users="*"/>
<allow roles="SysAdmins,AppAdmins"/>
</authorization>
</system.web>
</location>
</configuration>
我相信这个配置目前阻止了所有人。我做过类似的配置,不会阻止任何人。
我怀疑问题在于同时使用 system.web 和 system.webserver 部分。任何有关使此配置正常工作的帮助将不胜感激。
更新
从 <location> 元素中删除 <system.webServer> 部分会使该文件夹中的 .aspx 页面正确返回!不幸的是,该文件夹中的 .js 文件仍然对所有用户都被阻止......理想情况下,我也想锁定 .js 文件,以免被无视。所以我还在寻求帮助。