public async Task UpdateRoleAsync(long id, UserRolePatchDTO userRolePatchDTO) { if (id != userRolePatchDTO.Id) { throw new ValidationException("Идентификаторы должны совпадать"); } var user = await _userManager.FindByIdAsync(userRolePatchDTO.Id.ToString()); if (user == null) { throw new NotFoundException("Пользователь не найден"); } var role = await _roleManager.FindByNameAsync(userRolePatchDTO.Role); if (role == null) { throw new ValidationException("Неправильная роль"); } var currentUser = await _userManager.GetUserAsync(User); if (!await UserHasAccessToUser(currentUser, user) || !await UserHasAccessToRole(currentUser, userRolePatchDTO.Role)) { throw new ValidationException("Ошибка доступа"); } var result = await _userManager.RemoveFromRolesAsync(user, await _userManager.GetRolesAsync(user)); if (!result.Succeeded) { throw new ValidationException("Ошибка при смене роли"); } result = await _userManager.AddToRoleAsync(user, userRolePatchDTO.Role); if (!result.Succeeded) { throw new ValidationException("Ошибка при смене роли"); } _logger.LogInformation($"Роль пользователя, {user.Email}, успешно изменена на \"{role}\""); }
public async Task <ActionResult> UpdateUserRole(long id, [FromBody] UserRolePatchDTO userRolePatchDTO) { await _bll.Identity.UpdateRoleAsync(id, userRolePatchDTO); return(Ok()); }