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

ChangeCurrentUserPasswordCommand

Назначение

Изменение пароля текущего пользователя. Взаимодействует с Keycloak через IKeycloakUsersManager.ChangePassword и публикует AfterUserUpdatedNotification.

Цели

  • Изменить пароль пользователя в Keycloak
  • Публиковать полный snapshot пользователя в Kafka через Outbox после смены пароля

Command: ChangeCurrentUserPasswordCommand

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

ПолеТипОбязательноеОписание
PasswordstringДаНовый пароль
примечание

UserId в Keycloak определяется из TenantedUserIdentityContext.Actor.Id (Keycloak UserId из токена).

Result: ChangeCurrentUserPasswordCommandResult

Пустой результат (команда без возвращаемых данных).

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

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

  1. Получить KeycloakUserId из TenantedUserIdentityContext.Actor.Id.ToString("D").
  2. Найти UserIdentityEntity через userIdentityEntityRepository.FindByProviderUserId (Keycloak, keycloakUserId).
  3. Если не найдена — ошибка «Связь пользователя с Keycloak не найдена».
  4. Получить UserEntity через userEntityRepository.GetById.
  5. Вызвать keycloakUsersManager.ChangePassword (keycloakUserId, Password, isTemporary: false).
  6. Если изменение не удалось — вернуть Result от keycloakUsersManager.
  7. Publish AfterUserUpdatedNotification (UserId, TenantId).
  8. Вернуть ChangeCurrentUserPasswordCommandResult.

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

  • Связь с Keycloak не найдена: ошибка «Связь пользователя с Keycloak не найдена» с метаданными KeycloakUserId, TenantId.
  • Ошибка Keycloak: возвращается Result от keycloakUsersManager (например, слабый пароль, ограничения Keycloak).

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

События

  • AfterUserUpdatedNotification — handler формирует AfterUserUpdatedEvent и записывает в Outbox.

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