C# 如何管理授权访问控制器的角色?
下面是添加访问控制器方法的角色授权的最直接的方法C# 如何管理授权访问控制器的角色?,c#,authorization,asp.net-identity,owin,claims-based-identity,C#,Authorization,Asp.net Identity,Owin,Claims Based Identity,下面是添加访问控制器方法的角色授权的最直接的方法 [Authorize] public ActionResult Index() { return View(); } 当然,将每个方法都归为属性是一件痛苦的事情,因此任何想要保持理智的程序员都会添加如下过滤器 public static void RegisterGlobalFilters(GlobalFilterCollection filters) { ... filters.Add(new AuthorizeAttribute()); }
[Authorize]
public ActionResult Index() { return View(); }
当然,将每个方法都归为属性是一件痛苦的事情,因此任何想要保持理智的程序员都会添加如下过滤器
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{ ... filters.Add(new AuthorizeAttribute()); }
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{ ... filters.Add(new AuthorizeAttribute { Roles = "monkey,donkey" }); }
现在的问题是,当用户被授权但没有角色声明时,他们仍然可以访问这些方法,这迫使我对每个方法都使用以下语法。这让我很难过
[Authorize(Roles = "monkey,donkey")]
public ActionResult Index() { return View(); }
我想知道的是如何添加这样一个全局过滤器,但只允许某些角色。到目前为止,我发现的最好的方法是指定过滤器的属性(一个狡猾的属性,因为它在构造函数列表中对此一无所知),如下所示
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{ ... filters.Add(new AuthorizeAttribute()); }
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{ ... filters.Add(new AuthorizeAttribute { Roles = "monkey,donkey" }); }
我的做法是拥有一个
BaseController
,它看起来像这样:
[Authorize]
public class BaseController : Controller
{
}
然后,项目中的每个其他控制器都应从该控制器继承。我通常在基本控制器中有一些助手方法
对于只有特定角色才应具有访问权限的区域,我会指定一个特定的控制器:
[Authorize(Role = "monkey")]
public class MonkeyController : BaseController
{
}
然后,具有这些权限的每个控制器都继承自MonkeyController
对于匿名访问,请在控制器或操作上使用
[AllowAnonymous]
。我很好奇您将基本控制器的文件放在哪里。它与其他控制器放在同一文件夹中,还是放在其他地方。很高兴知道其他人如何组织文件。是的,通常我的基本控制器与其他控制器位于同一文件夹中