2015-10-13 2 views
1

В настоящее время у меня есть несколько контроллеров, которые я ограничил с помощью декоратора [Authorize]. Теперь мне нужно сделать это в нескольких разных контроллерах, есть ли центральное место, в которое это можно положить? Однажды в этом месте я могу сказать, какие контроллеры применять это, вместо того, чтобы помещать его в каждый отдельный файл контроллера?применение разрешения от общего места

+0

Вы можете создать настраиваемый фильтр, но который применил бы его глобально. – singsuyash

+1

вы можете создать baseController, который имеет атрибут authorize. Поскольку атрибуты также наследуются. Даже вы можете создать иерархию согласно авторизации роли. См. Ответ для получения дополнительной информации. Http://stackoverflow.com/a/32803405/4293929 – MstfAsan

ответ

2

Как о чем-то вроде этого:

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(HttpActionContext actionContext) 
    { 
      string controllerName = actionContext.ControllerContext.ControllerDescriptor.ControllerName; 
      bool shouldAuthorize = //.. Check if controller needs authorization 
      if(!shouldAuthorize) 
       SkipAuthorization(actionContext); 
      else if(!IsAuthorized(actionContext)) 
       HandleUnauthorizedRequest(actionContext); 
    } 
} 

Тогда вы бы применить этот фильтр глобально:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new CustomAuthorizeAttribute()); 
} 

Обратите внимание, что проверка контроллера делается внутри пользовательский атрибут.

0

Вы можете создать базовый контроллер, на который наследуются другие контроллеры. В этом классе примените свой основной атрибут авторизации.

Namespace Controllers 
    <SecureAuthorizeAttribute> 
    Public Class SecureController 
     Inherits Controller 
    End Class 
End Namespace 

Тогда в ваших других контроллеров:

Public Class ViewDetailsController 
    Inherits SecureController 
End Class 

Это будет применяться <SecureAuthorizeAttribute> к каждому действию в классах, которые наследуются от SecureController.

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