示例#1
0
        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}\"");
        }
示例#2
0
        public async Task <ActionResult> UpdateUserRole(long id, [FromBody] UserRolePatchDTO userRolePatchDTO)
        {
            await _bll.Identity.UpdateRoleAsync(id, userRolePatchDTO);

            return(Ok());
        }