Asp.net mvc 如何授权一组控制器而不在每个控制器上放置注释?

Asp.net mvc 如何授权一组控制器而不在每个控制器上放置注释?,asp.net-mvc,asp.net-mvc-3,controller,authorize,authorize-attribute,Asp.net Mvc,Asp.net Mvc 3,Controller,Authorize,Authorize Attribute,我有一套控制器,每一套都用于每种授权类型。例如,a类授权将有一组控制器,每个控制器都需要a类授权。是否有一种方法可以将一个[Authorize(Role=“Class a”)]属性放置在某个地方,该属性将应用于这些控制器中的每个控制器,而不必使用相同的属性装饰每个控制器?在基类上设置属性并继承,创建最适合您的场景的层次结构…您可以从基本控制器继承,例如 [Authorize(Role = "Class A")] public class ClassARequiredController : Co

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

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

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

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

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

是的,有一种方法,将所有这些
a级
控制器从一个基本控制器派生,并在其上放置
authorized属性

[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
{
    ...
} 

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

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

public class AController: CustomBaseController{}

public class BController: CustomBaseController{}

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

基于代码的配置

没有属性或xml使代码混乱

低压印


流畅的安全性不会像野火一样在应用程序中蔓延。您的配置可以保存在一个文件中。

此外,根据您拥有的控制器数量,您也可以轻松地将讨厌的[Authorize]属性放在顶部。有了一个基本控制器,您似乎无论如何都要搞乱每个控制器。是的,但是使用基本控制器是初始化和检查所有控制器的一些数据的最佳实践。也许您想使用自定义授权属性。还对单个控制器上的自定义授权属性进行了更改。URL现在默认为域停车页面。流畅的安全仍然是一件事吗?