#c# #asp.net-core #asp.net-core-webapi
#c# #asp.net-core #asp.net-core-webapi
Вопрос:
Я назначаю роль для пользователя, но когда я проверяю
_userManager.IsInRoleAsync(user, roleName)
Он просто возвращает false, и я не могу удалить эту роль
Вот код в 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>();
}
Ответ №1:
Я решил проблему, я понизил рейтинг с Dotnet core 5.0 до Dotnet core 3.1 и изменил всю структуру идентификации на 3.1.1. Я думаю, это ошибка.
Ответ №2:
RemoveFromRoleAsync
возвращает IdentityResult
, скорее всего, там указан ваш сбой
IdentityResult result = await _userManager.RemoveFromRoleAsync(user, roleName);
if (!result.Succeeded)
{
// check what's in errors
var errors = result.Errors;
}
Комментарии:
1. при проверке я получаю сообщение об ошибке «UserNotInRole», конкретное описание: «Пользователь не находится в роли «учитель»».
2. переменные роли = ожидают _userManager. GetRolesAsync(user); когда я проверяю, как эта переменная, роли по-прежнему получают список ролей пользователя, что произошло? @Eric