C# 使用MVC授权的隐式角色分配
我正在使用自己的自定义授权属性C# 使用MVC授权的隐式角色分配,c#,asp.net-mvc,authentication,authorization,roles,C#,Asp.net Mvc,Authentication,Authorization,Roles,我正在使用自己的自定义授权属性MyAuthorizeAttribute:AuthorizeAttribute进行授权,这非常有效。问题在于角色分配。在我使用的安全模型中,如果用户具有Adminroleuser并且Manager角色包含在Admin中,那么我将使用该模型。所以 [MyAuthorize(Roles = "Admin")] 允许访问所有方法。因此,直观的解决方案是在每个控制器上分配“管理员”但这是最干净的解决方案吗? 还有,如果我有几十个角色要处理呢代码行如下所示: [MyAuth
MyAuthorizeAttribute:AuthorizeAttribute
进行授权,这非常有效。问题在于角色分配。在我使用的安全模型中,如果用户具有Admin
roleuser
并且Manager
角色包含在Admin中,那么我将使用该模型。所以
[MyAuthorize(Roles = "Admin")]
允许访问所有方法。因此,直观的解决方案是在每个控制器上分配“管理员”但这是最干净的解决方案吗?
还有,如果我有几十个角色要处理呢代码行如下所示:
[MyAuthorize(Roles = "Admin, Role A, Role B... Role Z")]
如果接下来我决定重命名其中一个角色名,我应该使用角色id吗?。
如果我在自定义授权方法中筛选角色,那么我就有可能在该函数中创建一个巨大的switch语句,如下所示:
switch(Controller Accessed)
{
case Index: //if user, admin, or any other role exist
case Manage: //if admin role exists
}
使以后更容易重命名 如果您希望角色名称发生更改,那么在使用常量或枚举进行重构时,您将获得更好的工具支持
public static class Roles
{
public const string UserAdmin = "User Administrator";
public const string SuperAdmin = "Super Administrator";
public const string RegularUser = "Regular User";
}
或
重新使用公共权限组
如果您发现自己在权限中使用相同的角色,可以通过将MyAuthorize筛选器或MVC基本控制器子类化来简化权限。任何继承下面BaseAdminController的类也将应用MyAuthorize筛选器
[MyAuthorize(Roles = Roles.UserAdmin, Roles.SuperAdmin)]
public abstract class BaseAdminController : Controller {
}
或
[MyAuthorize(Roles = Roles.UserAdmin, Roles.SuperAdmin)]
public abstract class BaseAdminController : Controller {
}
public AdminAuthorize : MyAuthorize
{
public AdminAuthorize()
{
base.Roles = new[] { Roles.UserAdmin, Roles.SuperAdmin };
}
}