我扩展了IdentityUser类并添加了一个引用校表的属性,如下所示:
public class ApplicationUser : IdentityUser
{
public Guid? SchoolId { get; set; }
public School School { get; set; }
}现在,在我的应用程序的所有控制器中,我需要检查登录的用户是否有任何学校链接到他的注册。如果不是,则应该拒绝访问。我已经有一个用于验证访问的[Authorize(Roles = "admin, coordinator, librarian")],但此验证是基于角色的。现在,除了角色之外,我还需要检查SchoolId属性。
我怎么做这个检查?我不想在每个Action上进行手动验证。
发布于 2020-09-08 06:06:21
您可以定义一个基于HasSchool声明的HasSchoolPolicy
services.AddAuthorization(options =>
{
options.AddPolicy("SchoolPolicy", policy =>
policy.RequireClaim("HasSchool"));
});在IDP级别,每个用户都应该基于SchoolId属性使用以下内容更新其声明:
if (user.SchoolId.HasValue)
await userMgr.AddClaimAsync(user, new Claim("HasSchool"))然后您只需使用以下命令在控制器方法上添加符号:
[Authorize(Policy = "SchoolPolicy", Roles = "...")]https://stackoverflow.com/questions/63784084
复制相似问题