如何更改角色声明并根据 Asp.Net Core中的一个请求应用它? 我尝试使用
_signInManager.RefreshSignInAsync(user);
但它仅在刷新页面后有效。有没有办法在一个请求中更新用户的角色并更改当前主体?
您无法直接更改Current ClaimsPrincipal
。
要反映新的声明,您可以尝试_signInManager.CreateUserPrincipalAsync
。
要检查同一请求中的新角色,您可以尝试User.AddIdentity
显式将新角色声明添加到User
。
var roleName = Guid.NewGuid().ToString();
var r1 = User.IsInRole(roleName);
var user = await _userManager.GetUserAsync(User);
var role = await _roleManager.CreateAsync(new IdentityRole { Name = roleName });
await _userManager.AddToRoleAsync(user, roleName);
var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user);
var claims = claimsPrincipal.Claims.ToList();
User.AddIdentity(new ClaimsIdentity(new List<Claim>() { claims.FirstOrDefault(c => c.Value == roleName) }));
var r3 = User.IsInRole(roleName);