如何管理哪些角色被授权访问控制器



添加将访问控制器方法的角色的授权的最简单方法如下。

[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" }); }
  1. 这是推荐的方法还是有更可靠的方法
  2. 如果我只想将过滤器添加到某些方法/控制器,我该如何控制
  3. 如何允许匿名访问某些方法/控制器

我的做事方式是有一个BaseController,它看起来像这样:

[Authorize]
public class BaseController : Controller
{
}

然后,项目中的每个其他控制器都应该继承此控制器。我通常在基本控制器内部有一些辅助方法。

对于只有特定角色才能访问的区域,我会指定一个特定的控制器:

[Authorize(Role = "monkey")]
public class MonkeyController : BaseController
{
}

然后每个具有这些权限的控制器从CCD_ 2继承。

对于匿名访问,请在控制器或操作上使用[AllowAnonymous]

相关内容

  • 没有找到相关文章

最新更新