在.net core中更新具有身份的用户角色而不重新记录



我正在用以下代码更新一个用户的角色:

string UserID = User.FindFirstValue(ClaimTypes.NameIdentifier);
var user = await _userManager.FindByIdAsync(UserID);

var roles = await _userManager.GetRolesAsync(user);
if (User.IsInRole(Roles.niveau1.ToString()))
{
List<string> lstRolesASupprimer = new() { Roles.niveau1.ToString() };
List<string> lstRolesAAjouter = new() { Roles.niveau2.ToString() };
var result = await _userManager.RemoveFromRolesAsync(user, lstRolesASupprimer);
result = await _userManager.AddToRolesAsync(user, lstRolesAAjouter);
}

问题是用户必须断开连接并重新连接才能激活新角色。是否可以立即更改用户角色?

感谢

在用户登录时将身份信息(角色、声明)放入cookie中。由于用户已经登录,这行代码_userManager.AddToRolesAsync(user, lstRolesAAjouter)将更新数据库,但不更新cookie。你必须得重新发布cookie

尝试添加

SignInManager.SignIn(user, false, false); 

result = await _userManager.AddToRolesAsync(user, lstRolesAAjouter);

@Hossein的回答是有效的,但它带来了一个问题。当您强制手动登录时,您必须硬编码cookie持久性(无论用户是否会被记住)。这是一个问题,因为这可能会导致用户违背自己的意愿被记住,反之亦然。可以手动解密cookie和有条件地调用SignIn根据用户的当前持久性的选择,但这是一个非常痛苦的过程,值得庆幸的是,SignInManager为我们提供了一个方便的方法确切目的。

_signInManager.RefreshSignInAsync(user);

这将用当前的持久性设置刷新cookie,并且用户的声明和角色将得到更新。

最新更新