[英]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.