Lỗi xóa Role của người dùng

Mình đang gặp vấn đề khi xóa role của người dùng cụ thể là ở dùng code này :
await _userManager.IsInRoleAsync(user, roleName)
thì nó luôn trả về false.

Khi mình check như này:

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

thì bị error là UserNotInRole

var roles = await _userManager.GetRolesAsync(user);
Biến roles vấn trả về được các role của user đó ạ

Có ai biết cách khác phục không chỉ với ạ

Full code

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

Startup.cs

            services.AddIdentity<User, Role>().AddEntityFrameworkStores<ToeicOnlineContext>().AddDefaultTokenProviders();
            //services.AddDefaultIdentity<User>()
            //   .AddRoles<Role>() // <-- Add this line
            //    .AddEntityFrameworkStores<ToeicOnlineContext>();
            services.AddScoped<IUserClaimsPrincipalFactory<User>, UserClaimsPrincipalFactory<User, Role>>();
            services.AddTransient<UserManager<User>, UserManager<User>>();
            services.AddTransient<SignInManager<User>, SignInManager<User>>();
            services.AddTransient<RoleManager<Role>, RoleManager<Role>>();

Cái quan trọng là:

là gì? Các phương thức của nó cụ thể thực hiện những gì? Liệu chúng có thực hiện đúng?

3 Likes

Mình vừa update rồi ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?