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