Перейти к основному содержимому

ResetEmployeePasswordByIdCommand

Назначение

Сброс пароля сотрудника в Keycloak по новому значению. Выполняется через IKeycloakUsersManager.ChangePassword; в БД изменения не вносятся. Требует разрешение Identity.Employees.Update.Password.

Цели

  • Найти UserIdentityEntity (Provider = Keycloak) по UserId
  • Вызвать keycloakUsersManager.ChangePassword
  • Опубликовать AfterUserUpdatedNotification

Command: ResetEmployeePasswordByIdCommand

Входные данные

ПолеТипОбязательноеОписание
UserIdGuidДаИдентификатор пользователя
PasswordstringДаНовый пароль

Result: ResetEmployeePasswordByIdCommandResult

Пустой результат.

Бизнес-логика

Основной сценарий

  1. Получить UserEntity через userEntityRepository.FindById по UserId.
  2. Если не найден — ошибка «Сотрудник не найден».
  3. Проверить TenantId: userEntity.TenantId должен совпадать с TenantId из контекста; иначе ошибка «Сотрудник не принадлежит текущему тенанту».
  4. Найти UserIdentityEntity через userIdentityEntityRepository.FindByUserIdAndProvider (UserId, Keycloak).
  5. Если не найдена или ProviderUserId пустой — ошибка «Связь пользователя с Keycloak не найдена».
  6. Вызвать keycloakUsersManager.ChangePassword (ProviderUserId, Password, isTemporary: false).
  7. Если ошибка — проброс Result от keycloakUsersManager.
  8. Publish AfterUserUpdatedNotification.
  9. Вернуть Result.

Альтернативные сценарии

  • Сотрудник не найден: ошибка «Сотрудник не найден».
  • Сотрудник не принадлежит тенанту: ошибка «Сотрудник не принадлежит текущему тенанту».
  • Связь с Keycloak не найдена: ошибка «Связь пользователя с Keycloak не найдена».
  • Ошибка Keycloak: проброс Result от keycloakUsersManager.

Диаграмма алгоритма

События

Связанные сущности