更新Asp.Net核心角色声明

时间:2018-09-19 11:28:53

标签: c# asp.net-core .net-core asp.net-identity

我如何才能更改角色声明并按照Asp.Net Core中的一个请求进行应用? 我尝试使用

_signInManager.RefreshSignInAsync(user);

但是它仅在刷新页面后才起作用。有什么方法可以在一个请求中更新用户角色并更改当前主体?

1 个答案:

答案 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);