I am assign a role for the user, but when I check
_userManager.IsInRoleAsync(user, roleName)
It just return false and I cannot remove that role
Here is the code at userService
public async Task<ApiResult<bool>> RoleAssign(Guid id, RoleAssignRequest request)
{
var user = await _userManager.FindByIdAsync(id.ToString());
if (user == null)
{
return new ApiErrorResult<bool>("Tài khoản không tồn tại");
}
var removedRoles = request.Roles.Where(x => x.Selected == false).Select(x => x.Name).ToList();
foreach (var roleName in removedRoles)
{
if (await _userManager.IsInRoleAsync(user, roleName) == true)
{
await _userManager.RemoveFromRoleAsync(user, roleName);
}
}
await _userManager.RemoveFromRolesAsync(user, removedRoles);
var addedRoles = request.Roles.Where(x => x.Selected).Select(x => x.Name).ToList();
foreach (var roleName in addedRoles)
{
if (await _userManager.IsInRoleAsync(user, roleName) == false)
{
await _userManager.AddToRoleAsync(user, roleName);
}
}
return new ApiSuccessResult<bool>();
}
RemoveFromRoleAsync
returns an IdentityResult
, your failure is most likely listed in there
IdentityResult result = await _userManager.RemoveFromRoleAsync(user, roleName);
if (!result.Succeeded)
{
// check what's in errors
var errors = result.Errors;
}
I solved the problem, I downgraded from Dotnet core 5.0 to Dotnet core 3.1 and changed all identity framework to 3.1.1. I think it a bug.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.