我如何才能更改角色声明并按照Asp.Net Core中的一个请求进行应用? 我尝试使用
_signInManager.RefreshSignInAsync(user);
但是它仅在刷新页面后才起作用。有什么方法可以在一个请求中更新用户角色并更改当前主体?
答案 0 :(得分:1)
您无法直接更改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);