ChangeCurrentUserPasswordCommand
Назначение
Изменение пароля текущего пользователя. Взаимодействует с Keycloak через IKeycloakUsersManager.ChangePassword и публикует AfterUserUpdatedNotification.
Цели
- Изменить пароль пользователя в Keycloak
- Публиковать полный snapshot пользователя в Kafka через Outbox после смены пароля
Command: ChangeCurrentUserPasswordCommand
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| Password | string | Да | Новый пароль |
примечание
UserId в Keycloak определяется из TenantedUserIdentityContext.Actor.Id (Keycloak UserId из токена).
Result: ChangeCurrentUserPasswordCommandResult
Пустой результат (команда без возвращаемых данных).
Бизнес-логика
Основной сценарий
- Получить KeycloakUserId из TenantedUserIdentityContext.Actor.Id.ToString("D").
- Найти UserIdentityEntity через
userIdentityEntityRepository.FindByProviderUserId(Keycloak, keycloakUserId). - Если не найдена — ошибка «Связь пользователя с Keycloak не найдена».
- Получить UserEntity через
userEntityRepository.GetById. - Вызвать
keycloakUsersManager.ChangePassword(keycloakUserId, Password, isTemporary: false). - Если изменение не удалось — вернуть Result от keycloakUsersManager.
- Publish AfterUserUpdatedNotification (UserId, TenantId).
- Вернуть ChangeCurrentUserPasswordCommandResult.
Альтернативные сценарии
- Связь с Keycloak не найдена: ошибка «Связь пользователя с Keycloak не найдена» с метаданными KeycloakUserId, TenantId.
- Ошибка Keycloak: возвращается Result от keycloakUsersManager (например, слабый пароль, ограничения Keycloak).
Диаграмма алгоритма
События
- AfterUserUpdatedNotification — handler формирует AfterUserUpdatedEvent и записывает в Outbox.