如何授权一组控制器而不在每个控制器上放置注释



我有一组控制器,每个控制器用于每种授权类型。例如,a类授权将有一组控制器,每个控制器都需要a类授权。有没有一种方法可以在某个地方放置一个[Authorize(Role="Class A")]属性,该属性将应用于这些控制器中的每一个,而不必用相同的属性装饰每个控制器?

您可以初始化从基本控制器派生的那些控制器。即将您的属性放在控制器基类上,并确保中的每个控制器都派生自基类。

[Authorize(Role="Class A")]
public class CustomBaseController : Controller{}
public class AController: CustomBaseController{}
public class BController: CustomBaseController{}

是的,有一种方法,使所有A-class控制器从一个基本控制器派生,并在其上放置AuthorizeAttribute:

[Authorize(Role="Class A")]
public class AController : Controller 
{
    ...
} 
public class AFirstController : AController // Gets it's parent attribute
{
    ...
} 
public class ASecondController : AController // Gets it's parent attribute
{
    ...
} 

这里有2或3个响应解释了如何做到这一点……但您也可以使用Fluent Security在一个文件中处理所有控制器+操作设置。一些好处(来自他们的网站):

基于代码的配置

没有任何属性或xml使代码混乱。

低印记

Fluent Security不会在您的应用程序中像野火一样蔓延。您的配置可以保存在一个文件中。

您可以从基本控制器继承,例如

[Authorize(Role = "Class A")]
public class ClassARequiredController : Controller {}

否则,你会看到一个全局过滤器,根据你的问题,我假设你有多个角色和集合,所以我认为全局过滤器不适合你。

基类上设置属性并继承,创建最适合您的场景的层次结构。。。

最新更新