【发布时间】:2017-03-23 02:38:43
【问题描述】:
我有一组控制器,每个控制器都用于每种授权类型。例如,A 类授权将有一组控制器,每个控制器都需要 A 类授权。有没有办法在某处放置一个[Authorize(Role="Class A")] 属性,该属性将应用于每个控制器,而不必用相同的属性装饰每个控制器?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 controller authorize authorize-attribute
我有一组控制器,每个控制器都用于每种授权类型。例如,A 类授权将有一组控制器,每个控制器都需要 A 类授权。有没有办法在某处放置一个[Authorize(Role="Class A")] 属性,该属性将应用于每个控制器,而不必用相同的属性装饰每个控制器?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 controller authorize authorize-attribute
您可以初始化从基本控制器派生的那些控制器。即将您的属性放在控制器基类上,并确保其中的每个控制器都派生自基类。
[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 {}
否则您会查看全局过滤器,根据您的问题,我假设您有多个角色和集合,所以我认为全局过滤器不适合您。
【讨论】:
在基类上设置属性并继承,创建最适合您的场景的层次结构...
【讨论】: