2012-05-03 58 views
5

如何請求/elmah.axd被限制爲Umbraco管理員用戶如何在Umbraco中保護ELMAH Web控制檯?

這是我的理解是一把umbraco成員身份和角色提供適用於一把umbraco 成員但不用戶 - 一把umbraco用戶帳戶不會出現有一個用戶名或角色(如「管理員」),可能是在這樣的web.config中使用:

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

這是在其他ASP.Net應用程序中保護ELMAH的推薦方法。

任何人在Umbraco做到這一點?

回答

6

我通過創建一個HTTP模塊攔截請求解決的問題elmah.axd,並授權只有Umbraco管理員才能查看它。繼承人的模塊代碼:

namespace MyNamespace 
{ 
    using System; 
    using System.Configuration; 
    using System.Web; 
    using System.Web.Configuration; 

    using umbraco.BusinessLogic; 

    public class ElmahSecurityModule : IHttpModule 
    { 
     private HttpApplication _context; 

     public void Dispose() 
     { 
     } 

     public void Init(HttpApplication context) 
     { 
      this._context = context; 
      this._context.BeginRequest += this.BeginRequest; 
     } 

     private void BeginRequest(object sender, EventArgs e) 
     { 
      var handlerPath = string.Empty; 

      var systemWebServerSection = (HttpHandlersSection)ConfigurationManager.GetSection("system.web/httpHandlers"); 

      foreach (HttpHandlerAction handler in systemWebServerSection.Handlers) 
      { 
       if (handler.Type.Trim() == "Elmah.ErrorLogPageFactory, Elmah") 
       { 
        handlerPath = handler.Path.ToLower(); 
        break; 
       } 
      } 

      if (string.IsNullOrWhiteSpace(handlerPath) || !this._context.Request.Path.ToLower().Contains(handlerPath)) 
      { 
       return; 
      } 

      var user = User.GetCurrent(); 

      if (user != null) 
      { 
       if (user.UserType.Name == "Administrators") 
       { 
        return; 
       } 
      } 

      var customErrorsSection = (CustomErrorsSection)ConfigurationManager.GetSection("system.web/customErrors"); 

      var defaultRedirect = customErrorsSection.DefaultRedirect ?? "/"; 

      this._context.Context.RewritePath(defaultRedirect); 
     } 
    } 
} 

...並在web.config:

<configuration> 
    <system.web> 
     <httpModules> 
      <add name="ElmahSecurityModule" type="MyNamespace.ElmahSecurityModule" /> 
     </httpModules> 
    </system.web> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true"> 
      <add name="ElmahSecurityModule" type="MyNamespace.ElmahSecurityModule" /> 
     </modules> 
    </system.webServer> 
</configuration> 
+0

非常整潔!非常感謝JonH! – Karl

+0

非常感謝 - 我的Umbraco 4網站非常適合 - 但不幸的是,user user = User.GetCurrent()總是在我的Umbraco 7網站中返回null。即使在處理授權後臺的請求時!你有什麼想法,爲什麼?謝謝! –

0

我認爲你必須修改ELMAH得到它與一把umbraco

article正確整合可能是你在找什麼

+0

問題與攔截請求到ELMAH動態資源處理程序(elmah.axd),只有授權做Umbraco管理員用戶查看它。 – JonH