2015-10-13 54 views
1

我目前有几个控制器,我用[Authorize]修饰器进行了限制。我现在需要在几个不同的控制器中做到这一点,是否有一个中央位置,这可以放在?一旦进入那个位置,我可以告诉它哪个控制器可以应用它,而不是将它放到每个单独的控制器文件中?申请从一个共同的位置授权

+0

您可以创建一个自定义过滤器,但是它将全局应用 – singsuyash

+1

您可以创建具有授权属性的baseController。因为属性也被继承。即使您可以根据角色授权创建层次结构。有关更多信息,请参阅答案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继承的类。