我目前正在研究用于管理某些数据的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>
此代码允许处于'dev'角色的用户(在我的aspnet_usersinroles表中)并拒绝所有其他用户。
但是,如果我使用具有此角色的一位用户登录,则会拒绝访问该页面。
如果我允许同一用户使用用户授权(见下文),我可以毫无问题地访问该页面。
<allow users="yohann.pansard@gmail.com"/>
我多次检查了我的Aspnet_usersinroles表,一切都很好。
我的roleManager看起来不错,因为我在应用程序中使用了这些相同的角色(例如Role.IsUserInRoles(“foo”,“reader”))。这是我的roleManager的配置:
<roleManager enabled="true" cacheRolesInCookie="false" defaultProvider="AspNetSqlRoleProvider">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="app_demo" />
</providers>
</roleManager>
我认为角色不是归功于用户,但我不确定。有可能吗?
我可能忘了什么,但我看不出这个元素是什么。
有人可以帮我吗?
答案 0 :(得分:0)
请查看以下链接,了解如何保护Elmah +您的配置应该是
<elmah>
<security allowRemoteAccess="true" />
</elmah>
<location path="elmah.axd" inheritInChildApplications="false">
<system.web>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<authorization>
<allow roles="Dev" />
<deny users="*" />
</authorization>
<!--
See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for
more information on using ASP.NET authorization securing ELMAH.
<authorization>
<allow roles="Dev" />
<deny users="*" />
</authorization>
-->
</system.web>
在appsetting标签下。您还应该更新正确的值
<appSettings>
<add key="elmah.mvc.disableHandler" value="false" />
<add key="elmah.mvc.requiresAuthentication" value="true" />
<add key="elmah.mvc.allowedRoles" value="Dev" />
</appSettings>