c# - 我无法使用角色管理器删除用户角色
问题描述
我试图通过 UI 上的复选框为用户删除或添加角色,但出现了一些错误
await _userManager.IsInRoleAsync(user, roleName)
此代码始终返回 false,我无法检查它。
var user = await _userManager.FindByIdAsync(id.ToString());
var roles = await _userManager.GetRolesAsync(user);
我还是可以roles
的user
。谁能解释我收到此错误的原因?
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>();
}
解决方案
当您尝试删除用户角色时:您可以这样做,我希望它会起作用。它只是一个基本的例子。删除角色代码:
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);
推荐阅读
- java - Spark Sql中poseexplode()的替代方法是什么,因为它不动态地接受可变数量的参数?
- spring-boot - Spring Eureka 寻找默认端口 8761 而不是自定义端口
- javascript - 如何将多个事件侦听器和查询选择器组合到一个函数中?
- javascript - 如何使用数组和 Jquery 填充下拉列表
- java - 使用 SQLServerBulkCopy 将数据从 SQL Server 导出到 Azure 时出错
- python - Python在从元组打印索引时添加新行
- react-native - 使用 useCallback 测试 react-native
- python - 无法理解错误消息(Python 中的回归)
- android-studio - Android Studio 腐败怪异:打开完全错误的文件
- python - 隐藏从自定义 CLI 应用程序生成的 json 文件格式数据?