_userManager.IsInRoleAsync(user, roleName) just return false



我为用户分配了一个角色,但当我检查时

_userManager.IsInRoleAsync(user, roleName)

它只是返回false,我无法删除该角色

这是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>();
}

我解决了这个问题,我从Dotnet核心5.0降级到Dotnet内核3.1,并将所有身份框架更改为3.1.1。我认为这是个错误。

RemoveFromRoleAsync返回一个IdentityResult,您的故障很可能列在中

IdentityResult result = await _userManager.RemoveFromRoleAsync(user, roleName);
if (!result.Succeeded)
{
// check what's in errors
var errors = result.Errors;
}

当您手动将角色名称插入[AspNetRoles]表中,而不定义NormalizedName时,可能会发生此问题。确保它们都在角色记录中定义,因为IsInRoleAsync方法实际上是针对NormalizedName字段而不是Name设计的。

最新更新