ResetEmployeePasswordByIdCommand
Назначение
Сброс пароля сотрудника в Keycloak по новому значению. Выполняется через IKeycloakUsersManager.ChangePassword; в БД изменения не вносятся. Требует разрешение Identity.Employees.Update.Password.
Цели
- Найти UserIdentityEntity (Provider = Keycloak) по UserId
- Вызвать keycloakUsersManager.ChangePassword
- Опубликовать AfterUserUpdatedNotification
Command: ResetEmployeePasswordByIdCommand
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| UserId | Guid | Да | Идентификатор пользователя |
| Password | string | Да | Новый пароль |
Result: ResetEmployeePasswordByIdCommandResult
Пустой результат.
Бизнес-логика
Основной сценарий
- Получить UserEntity через
userEntityRepository.FindByIdпо UserId. - Если не найден — ошибка «Сотрудник не найден».
- Проверить TenantId: userEntity.TenantId должен совпадать с TenantId из контекста; иначе ошибка «Сотрудник не принадлежит текущему тенанту».
- Найти UserIdentityEntity через
userIdentityEntityRepository.FindByUserIdAndProvider(UserId, Keycloak). - Если не найдена или ProviderUserId пустой — ошибка «Связь пользователя с Keycloak не найдена».
- Вызвать
keycloakUsersManager.ChangePassword(ProviderUserId, Password, isTemporary: false). - Если ошибка — проброс Result от keycloakUsersManager.
- Publish AfterUserUpdatedNotification.
- Вернуть Result.
Альтернативные сценарии
- Сотрудник не найден: ошибка «Сотрудник не найден».
- Сотрудник не принадлежит тенанту: ошибка «Сотрудник не принадлежит текущему тенанту».
- Связь с Keycloak не найдена: ошибка «Связь пользователя с Keycloak не найдена».
- Ошибка Keycloak: проброс Result от keycloakUsersManager.