从一个共同的位置申请授权

时间:2015-10-13 14:54:13

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我目前有一些控制器,我已经使用[Authorize]装饰器进行了限制。我现在需要在几个不同的控制器中执行此操作,是否有可以放入的中心位置?一旦进入该位置,我可以告诉它应用哪个控制器,而不是将它放到每个控制器文件中?

2 个答案:

答案 0 :(得分: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());
}

请注意,控制器验证在内部自定义属性中完成。

答案 1 :(得分:0)

您可以创建其他控制器继承的基本控制器。在此课程中,请应用您的主要授权属性。

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

然后在你的其他控制器中:

Public Class ViewDetailsController
    Inherits SecureController
End Class

这会将<SecureAuthorizeAttribute>应用于从SecureController继承的类中的每个操作。