ASP.NET标识角色

时间:2016-05-10 08:56:27

标签: c# asp.net asp.net-mvc roles

我正在努力完成以下

有多个角色(role1,role2,role3等),它们都具有不同的访问级别。 Role2可以访问与role1相同的角色,但不能访问role3。

我知道我可以使用控制器中的authorize属性来实现它,但是有一种不同的方式可能更优雅而不仅仅是属性中的角色列表吗?

2 个答案:

答案 0 :(得分:2)

您可以配置授权策略,意味着将角色分组到策略中。

ASP.NET Core示例:

services.AddAuthorization(options =>
            {
                options.AddPolicy("Role1", policy => policy.RequireRole("Role1");
                options.AddPolicy("Role2", policy => policy.RequireRole("Role1", "Role2");
                options.AddPolicy("Role3", policy => policy.RequireRole("Role1", "Role2", "Role3");
            });

使用授权属性在控制器中使用您的策略:

[Authorize(Policy = "Role3")]

答案 1 :(得分:1)

我已通过以下方式解决了这个问题:

AuthorizeRoleAttribute.cs

 public class AuthorizeRoleAttribute : AuthorizeAttribute
{
    public AuthorizeRoleAttribute(string role) : base()
    {
        var result = Enum.Parse(typeof(RolesEnum), role);
        int code = result.GetHashCode();
        List<string> list = new List<string>();
        foreach (var item in Enum.GetValues(typeof(RolesEnum)))
        {
            int tmpCode = item.GetHashCode();
            if (tmpCode >= code)
            {
                list.Add(item.ToString());
            }
        }
        Roles = string.Join(",", list);
    }

}

角色ENUM:

    public enum RolesEnum
{
    User = 100,
    Supervisor = 200,
    Administration = 300,
    Admin = 400
}

控制器:

[AuthorizationRole(“主管)] //一些代码

控制器将自动查找哪些角色通过枚举中的号码对主管有更多或相同的访问权限。