首页 > 解决方案 > 我无法使用角色管理器删除用户角色

问题描述

我试图通过 UI 上的复选框为用户删除或添加角色,但出现了一些错误

await _userManager.IsInRoleAsync(user, roleName)

此代码始终返回 false,我无法检查它。

var user = await _userManager.FindByIdAsync(id.ToString());
var roles = await _userManager.GetRolesAsync(user);

我还是可以rolesuser。谁能解释我收到此错误的原因?

private readonly UserManager<User> _userManager;
private readonly SignInManager<User> _signInManager;
private readonly RoleManager<Role> _roleManager;
private readonly IConfiguration _config;
private readonly IMapper _mapper;

public UserService(UserManager<User> userManager, 
    SignInManager<User> signInManager, RoleManager<Role> roleManager,
    IConfiguration config,
    IMapper mapper)
{
    _signInManager = signInManager;
    _userManager = userManager;
    _roleManager = roleManager;
    _config = config;
    _mapper = mapper;
}    
public async Task<ApiResult<bool>> RoleAssign(int id, RoleAssignRequest request)
{
    var user = await _userManager.FindByIdAsync(id.ToString());
    var roles = await _userManager.GetRolesAsync(user);
    var listRole = await _roleManager.RoleExistsAsync("admin");
    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, roles);
    
    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>();
}

标签: c#asp.netasp.net-mvcasp.net-coreasp.net-core-5.0

解决方案


当您尝试删除用户角色时:您可以这样做,我希望它会起作用。它只是一个基本的例子。删除角色代码:

 ApplicationUser user = UserManager.FindById(UserId.ToString());
            if (user != null)
            {
                foreach (var r  in user.Roles.ToList())
                {
                    user.Roles.Remove(r);
                }
            }

添加角色代码::

  IdentityUserRole userrole = new IdentityUserRole();
                           //add user information in userrole according to your buisness logic
                            user.Roles.Add(userrole);

推荐阅读