是否可以为所有控制器全局设置[Authorize]属性?

Sam*_*lly 17 asp.net-mvc asp.net-mvc-3

目前,将[Authorize]放在控制器类或特定操作上.是否可以集中为所有控制器设置[Authorize]属性,比如防止未经身份验证的使用.之后,可以在特定控制器上定义更具体的[授权]属性,例如

[Authorize(Roles="Admin, SuperUser")]
Run Code Online (Sandbox Code Playgroud)

谢谢.

Max*_*oro 37

这应该工作(放入Application_Start):

GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" });
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.一旦全局应用,将[授权(角色="用户")应用于特定操作会产生什么影响.它会覆盖它还是将授权扩展到"Admin","SuperUser","User"? (2认同)
  • 要对REST API执行相同的操作,请将其添加到WebApiConfig.Register():config.Filters.Add(new AuthorizeAttribute(){Roles =“ Admin,SuperUser”}); (2认同)

小智 10

另一种选择是让控制器继承自基本控制器类,并将AuthorizeAttribute放在那里.

看看这个答案

然后,您可以使用特定角色,用户等覆盖子类的基本AuthorizeAttribute.

[Authorize]
public class BaseController : Controller{}

public class ChildController: BaseController{}

[Authorize(Role = "Role A")]
public class AnotherChildController: BaseController{}
Run Code Online (Sandbox Code Playgroud)

  • 这似乎更糟。它要简单得多,并且有相同的机会,有人忘记从基类继承而不是忘记添加[Authorize]属性。 (2认同)