指定允许访问错误日志的用户角色

时间:2013-05-16 10:04:08

标签: c# asp.net-mvc-3 elmah elmah.mvc

由于某种原因,我无法指定应允许访问错误日志的角色。无论我输入什么角色(我有管理员,超级和测试角色),我的应用程序只是重定向到登录屏幕,这是我未获得授权的预期行为。如果我选择允许所有角色使用*它可以正常工作,但是当我需要将其限制为仅限超级角色时允许所有角色。

我的web.config文件中包含以下内容,允许在登录时访问所有角色:

<add key="loginUrl" value="~/Login/" />
<add key="elmah.mvc.disableHandler" value="false" />
<add key="elmah.mvc.disableHandleErrorFilter" value="false" />
<add key="elmah.mvc.requiresAuthentication" value="true" />
<add key="elmah.mvc.allowedRoles" value="*" />
<add key="elmah.mvc.route" value="elmah" />

但是当我将allowedRoles行更改为:

<add key="elmah.mvc.allowedRoles" value="Super" />

它不允许任何人访问,只是将它们发送到登录屏幕。

任何想法都将不胜感激。这是我第一次尝试使用Elmah,看起来非常好,但我对它并不熟悉,所以任何人都需要更多的信息来帮助我们提供帮助,我会提供。

修改

我现在已经将Emlah配置为使用SQL Server来记录错误,不确定这是否会对任何可能的答案产生影响。

3 个答案:

答案 0 :(得分:1)

你试过这个(来自How to secure Elmah.axd?):

<configuration>
  ...
  <location path="elmah.axd">
    <system.web>
      <authorization>
        <allow roles="Administrators"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

答案 1 :(得分:0)

在使用Elmah 1.2时我遇到了类似的问题,然后我升级到Elmah MVC并且它有效。

<configuration>
  <configSections>
    <sectionGroup name="elmah">
     <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
     <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
     <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
     <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>

  <appSettings>
    <add key="elmah.mvc.disableHandler" value="false" />
    <add key="elmah.mvc.disableHandleErrorFilter" value="false" />
    <add key="elmah.mvc.requiresAuthentication" value="false" />
    <add key="elmah.mvc.allowedRoles" value="CKAdmin" />
    <add key="elmah.mvc.route" value="elmah" />
  </appSettings>

  <system.web>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>
  </system.web>

  <system.webServer>
     <validation validateIntegratedModeConfiguration="false" />
       <modules runAllManagedModulesForAllRequests="true">
         <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
         <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
         <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
       </modules>
  </system.webServer>

  <elmah>
    <security allowRemoteAccess="false" />
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="D:\\ELMAH" />
  </elmah>
</configuration>

答案 2 :(得分:0)

您应该进行以下更改:

<appSettings>
 ......
<add key="elmah.mvc.allowedRoles" value="*" />
<add key="elmah.mvc.allowedUsers" value="Super" />
</appSettings>