简体   繁体   中英

_userManager.IsInRoleAsync(user, roleName) just return false

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM