8

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

4

5 回答 5

11

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

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

public class AController: CustomBaseController{}

public class BController: CustomBaseController{}
于 2012-03-22T21:41:41.883 回答
4

是的,有一种方法,使所有这些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
{
    ...
} 
于 2012-03-22T21:38:05.960 回答
4

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

基于代码的配置

没有属性或 xml 会使您的代码混乱。

低印记

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

于 2012-03-22T22:27:05.590 回答
3

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

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

否则,您将查看全局过滤器,并且根据您的问题,我假设您有多个角色和集合,因此我认为全局过滤器不适合您。

于 2012-03-22T21:38:02.370 回答
2

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

于 2012-03-22T21:37:26.377 回答