2015-05-21 9 views
1

Я пытаюсь запретить доступ ко всем IP-адресам в/Admin с помощью паролей исключений. Приложение Orchard CMS 1.8.1 работает на IIS 8.5. Я экспериментирую с правилами ограничений IP, но мне кажется, что это не самый подходящий инструмент, поскольку я мог устанавливать только права доступа к папкам, а не отдельным страницам. (управляемый, чтобы запретить доступ к TheAdmin теме.)Ограничить доступ к стороне администратора Orchard CMS по IP

Я попытался ниже фрагмент кода не повезло:

<location path="Admin"> 
    <system.webServer> 
     <security> 
     <ipSecurity allowUnlisted="false"> 
     </ipSecurity> 
     </security> 
    </system.webServer> 
</location> 

http://www.iis.net/configreference/system.webserver/security/ipsecurity

Также пытался создать виртуальный каталог для пользователей/Account/LogOn для корневого каталога и установить его права доступа, но это тоже не сработало.

Я думал установить URL-адрес Rewrites для/Admin, но не совсем уверен, как начать или какую логику я должен соблюдать.

Любые предложения?

ответ

1

Если я правильно понимаю ваши мотивы, я думаю, что было бы лучше написать модуль фильтра, который даст вам полный контроль над тем, что произойдет при каких условиях.

[OrchardFeature("FeatureDefinedInModuleTxtManifest")] 
public class AdminAccessFilter : FilterProvider, IAuthorizationFilter 
{ 
    private readonly IAuthorizer _authorizer; 

    public AdminAccessFilter(IAuthorizer authorizer) 
    { 
     _authorizer = authorizer; 
     Logger = NullLogger.Instance; 
    } 

    public ILogger Logger { get; set; } 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (!AdminFilter.IsApplied(filterContext.RequestContext) || !_authorizer.Authorize(StandardPermissions.AccessAdminPanel)) 
     { 
      // Not an admin area or no permission already, do nothing 
      return; 
     } 

     var request = filterContext.HttpContext.Request; 

     var userIp = 
      request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? // Proxy 
      request.UserHostAddress; 

     if (userIp != "100.100.100.100") // Your logic for denying access 
     { 
      Logger.Fatal("Unauthorized admin access detected from {0}", userIp); 

      filterContext.Result = new HttpUnauthorizedResult(); 
     } 
    } 
} 
+0

Я отдам его. – ZsoltFromCoventry

Смежные вопросы