我目前正在开发一个用于管理某些数据的 Aspnet MVC3 Razor 应用程序。对应用程序的访问由使用表单的身份验证控制。
我使用 ELMAH 进行错误捕获,以便再次处理它们。Elmah 提供了一个 elmah.axd 模块,该模块位于项目的根文件夹中,以便查看错误。
这些数据必须是私有的,这就是我在 web.config 文件中编写此规则的原因:
<location path="elmah.axd">
<system.web>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<authorization>
<allow roles="Dev"/>
<deny users="*" />
</authorization>
</system.web>
此代码允许处于“开发”角色的用户(在我的 aspnet_usersinroles 表中)并拒绝所有其他用户。
但是,如果我使用一个具有此角色的用户登录,则拒绝访问该页面。
如果我允许同一用户使用用户授权(见下文),我可以毫无问题地访问该页面。
<allow users="yohann.pansard@gmail.com"/>
我多次检查了我的 Aspnet_usersinroles 表,一切都很好。
我的 roleManager 看起来不错,因为我在应用程序中使用了这些相同的角色(例如 Role.IsUserInRoles("foo", "reader"))。这是我的角色管理器的配置:
<roleManager enabled="true" cacheRolesInCookie="false" defaultProvider="AspNetSqlRoleProvider">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="app_demo" />
</providers>
</roleManager>
我认为角色不属于用户,但我不确定。可能吗?
我可能忘记了一些东西,但我看不出这个元素可能是什么。
有人可以帮助我吗?