gpt4 book ai didi

asp.net-core - ASP.NET Core 身份角色、声明和用户

转载 作者:行者123 更新时间:2023-12-01 23:57:07 24 4
gpt4 key购买 nike

我是 ASP.NET Core 初学者。我陷入了角色、声明和用户关系之中。

我有一个用户Ben,该用户属于管理员角色。 管理员角色在数据库中拥有查看页面编辑页面声明。

但我无法获得属于该用户的声明和角色:

(请参阅代码中的注释)

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']
}
}
}

在我看来,当用户是某个角色的成员时,他就会继承该角色的声明。

默认的 ASP.NET Identity 有 5 个表:

  • 用户。
  • 角色。
  • UserRoles - 一个用户可以拥有多个角色。
  • 角色声明 - 一个角色可以有多个声明。
  • 用户声明 - 一个用户可以有多个声明。

我的想法正确吗?为什么 userManager.GetClaimsAsync(user) 返回空声明?

有什么建议吗?

最佳答案

Why userManager.GetClaimsAsync(user) returns empty claims ?

因为 UserManager.GetClaimsAsync(user) 查询 UserClaims 表。同样适用于RoleManager.GetClaimsAsync(role) 查询 RoleClaims 表。

但是根据 ASP.NET Identity Core 的设计,当用户是某个角色的成员时,他们会自动继承该角色的声明。您可以检查 ClaimsPrincipal,例如在 Controller 操作内:

var claims = User.Claims.ToList();

您可以在 UserClaimsPrincipalFactory.cs 中看到代码从用户创建一个 ClaimsPrincipal

关于asp.net-core - ASP.NET Core 身份角色、声明和用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42024218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com