如何管理哪些角色有权访问控制器?
How to manage what roles that are authorized to access a controller?
添加将要访问控制器方法的角色的授权的最直接方法是以下方法。
[Authorize]
public ActionResult Index() { return View(); }
当然,给每个方法都加上那个属性是一件很痛苦的事,所以任何想保持理智的程序员都按如下方式添加过滤器。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{ ... filters.Add(new AuthorizeAttribute()); }
现在的问题是,当用户获得授权但没有声明角色时,他们仍然可以访问这些方法,这迫使我无论如何都要对每个方法使用以下语法。这让我很伤心。
[Authorize(Roles = "monkey,donkey")]
public ActionResult Index() { return View(); }
我想知道的是添加这种全局过滤器但只允许特定角色的方法。到目前为止,我发现的最佳方法是指定一个 属性 过滤器(偷偷摸摸的,因为它在构造函数列表中没有任何相关内容),如下所示。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{ ... filters.Add(new AuthorizeAttribute { Roles = "monkey,donkey" }); }
- 这是推荐的方法还是有更可靠的方法?
- 如果我只想将过滤器添加到某些methods/controllers,我该如何控制?
- 如何允许匿名访问某些 methods/controllers?
我的做法是 BaseController
看起来像这样:
[Authorize]
public class BaseController : Controller
{
}
然后您项目中的所有其他控制器都应继承自该控制器。我通常在基本控制器中有一些辅助方法。
对于只有特定角色才能访问的区域,我做了一个特定的控制器:
[Authorize(Role = "monkey")]
public class MonkeyController : BaseController
{
}
然后每个具有这些权限的控制器都继承自 MonkeyController
。
对于匿名访问,请在控制器或操作上使用 [AllowAnonymous]
。
添加将要访问控制器方法的角色的授权的最直接方法是以下方法。
[Authorize]
public ActionResult Index() { return View(); }
当然,给每个方法都加上那个属性是一件很痛苦的事,所以任何想保持理智的程序员都按如下方式添加过滤器。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{ ... filters.Add(new AuthorizeAttribute()); }
现在的问题是,当用户获得授权但没有声明角色时,他们仍然可以访问这些方法,这迫使我无论如何都要对每个方法使用以下语法。这让我很伤心。
[Authorize(Roles = "monkey,donkey")]
public ActionResult Index() { return View(); }
我想知道的是添加这种全局过滤器但只允许特定角色的方法。到目前为止,我发现的最佳方法是指定一个 属性 过滤器(偷偷摸摸的,因为它在构造函数列表中没有任何相关内容),如下所示。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{ ... filters.Add(new AuthorizeAttribute { Roles = "monkey,donkey" }); }
- 这是推荐的方法还是有更可靠的方法?
- 如果我只想将过滤器添加到某些methods/controllers,我该如何控制?
- 如何允许匿名访问某些 methods/controllers?
我的做法是 BaseController
看起来像这样:
[Authorize]
public class BaseController : Controller
{
}
然后您项目中的所有其他控制器都应继承自该控制器。我通常在基本控制器中有一些辅助方法。
对于只有特定角色才能访问的区域,我做了一个特定的控制器:
[Authorize(Role = "monkey")]
public class MonkeyController : BaseController
{
}
然后每个具有这些权限的控制器都继承自 MonkeyController
。
对于匿名访问,请在控制器或操作上使用 [AllowAnonymous]
。