繁体   English   中英

ASP.NET标识角色

[英]ASP.NET Identity roles

我正在努力完成以下任务

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

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

您可以配置授权策略,也就是将角色分组到策略中。

ASP.NET核心示例:

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属性在控制器中使用您的策略:

[Authorize(Policy = "Role3")]

我用以下方式解决了它:

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(“Supervisor”)//一些代码

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM