我正在使用asp.net核心授权。我有一些角色,例如 超级管理员,管理员,用户。每个用户将被分配其中一个。 SuperAdmin可以更改任何用户的角色。所以基本上我想要动态角色系统。 因此在哪里映射用户角色数据和
[Authorize(Roles =“ Admin”)]
去哪里检查用户角色? 表示此事物将在哪里检查角色。
我正在使用Windows身份验证
答案 0 :(得分:0)
您可以通过策略使用基于声明的授权。在应用程序中设置Windows身份验证后,您可以向ClaimsPrincipal添加自定义声明,检查用户的身份并确认当前用户具有哪个权限/角色:
您可以向您的应用程序添加声明转换服务:
class ClaimsTransformer : IClaimsTransformation
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
var id = ((ClaimsIdentity)principal.Identity);
var ci = new ClaimsIdentity(id.Claims, id.AuthenticationType, id.NameClaimType, id.RoleClaimType);
//read database or flies or query AD to confirm user role by use ci.Name(username)
if (....)
{
ci.AddClaim(new Claim("role", "Admin"));
}
else
{
ci.AddClaim(new Claim("role", "user"));
}
var cp = new ClaimsPrincipal(ci);
return Task.FromResult(cp);
}
}
添加到Startup.cs中:
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
设置您的政策:
services.AddAuthorization(options =>
{
options.AddPolicy("Admin", policy =>
policy.RequireClaim("role", "Admin"));
options.AddPolicy("User", policy =>
policy.RequireClaim("role", "user"));
});
通过要求以下策略来限制对控制器或操作的访问:
[Authorize(Policy = "Admin")]
public IActionResult Contact()
{
.....
}
您还可以将AD组用作角色。根据您的要求,您可以修改以上代码以适合您的情况。管理用户/角色可以使用本地数据库或ASP.NET Core Identity自动创建表。