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>>();
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?