tri*_*nvh 12 claims-based-identity asp.net-identity asp.net-core
我是一名ASP.NET核心初学者.我陷入了角色,主张和用户关系的困境.
我有一个用户Ben,用户属于Admin角色.管理员角色在数据库中具有声明视图页面和编辑页面.
但我无法获得属于该用户的声明和角色:
(请参阅代码中的评论)
var user = await _userManager.FindByNameAsync(applicationUser.UserName);
if(user != null) {
var userClaims = await _userManager.GetClaimsAsync(user); // empty, WHY ?
var userRoles = await _userManager.GetRolesAsync(user); // ['admin']
var adminRole = DbContext.Roles.FirstOrDefault(x => x.Name == "Admin");
IList<Claim> adminClaims;
if(adminRole != null)
{
adminClaims = await _roleManager.GetClaimsAsync(adminRole);
// correct => ['view-page', 'edit-page']
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我理解当用户是某个角色的成员时,他会继承该角色的声明.
默认ASP.NET标识有5个表:
我认为对吗?为什么userManager.GetClaimsAsync(user)返回空索赔?
有什么建议吗?
为什么userManager.GetClaimsAsync(user)返回空索赔?
因为UserManager.GetClaimsAsync(user)查询UserClaims表.同为
RoleManager.GetClaimsAsync(role)查询RoleClaims表.
但是,当用户是角色的成员时,通过ASP.NET Identity Core中的设计,他们会自动继承角色的声明.您可以检查ClaimsPrincipal,例如在控制器操作中:
var claims = User.Claims.ToList();
Run Code Online (Sandbox Code Playgroud)
您可以在UserClaimsPrincipalFactory.cs中查看ClaimsPrincipal用户创建的代码.
| 归档时间: |
|
| 查看次数: |
6753 次 |
| 最近记录: |