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

RemoveRoleFromEmployeeCommand

Назначение

Удаление роли у сотрудника. Опционально можно сразу назначить новую роль (NewRoleId), чтобы не оставить пользователя без ролей. Требует разрешение Identity.Employees.Roles.Remove.

Цели

  • Удалить UserRoleReferenceEntity (UserId, RoleId)
  • Опционально: создать UserRoleReferenceEntity для NewRoleId перед удалением
  • Запретить удаление последней роли без назначения NewRoleId

Command: RemoveRoleFromEmployeeCommand

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

ПолеТипОбязательноеОписание
UserIdGuidДаИдентификатор пользователя
RoleIdlongДаИдентификатор роли для удаления
NewRoleIdlong?НетИдентификатор новой роли (если удаляется последняя роль)

Result: RemoveRoleFromEmployeeCommandResult

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

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

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

  1. Начать транзакцию (ReadCommitted).
  2. Получить UserEntity по UserId. Если не найден — ошибка «Сотрудник не найден».
  3. Проверить TenantId пользователя; если не совпадает — ошибка «Сотрудник не принадлежит текущему тенанту».
  4. Получить RoleEntity по RoleId. Если не найден — ошибка «Роль не найдена».
  5. Проверить TenantId роли; если не совпадает — ошибка «Роль не принадлежит текущему тенанту».
  6. Найти UserRoleReference (UserId, RoleId). Если не найдена — ошибка «У сотрудника нет указанной роли».
  7. Подсчитать количество ролей у пользователя.
  8. Если это последняя роль и NewRoleId не указан — ошибка «Невозможно удалить последнюю роль у сотрудника».
  9. Если указан NewRoleId: проверить существование и TenantId новой роли; если у пользователя её ещё нет — создать UserRoleReferenceEntity.
  10. Удалить UserRoleReferenceEntity.
  11. Publish AfterUserUpdatedNotification.
  12. Commit.
  13. Вернуть Result.

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

  • Сотрудник не найден: ошибка «Сотрудник не найден».
  • Сотрудник не принадлежит тенанту: ошибка «Сотрудник не принадлежит текущему тенанту».
  • Роль не найдена: ошибка «Роль не найдена».
  • Роль не принадлежит тенанту: ошибка «Роль не принадлежит текущему тенанту».
  • У сотрудника нет указанной роли: ошибка «У сотрудника нет указанной роли».
  • Последняя роль без NewRoleId: ошибка «Невозможно удалить последнюю роль у сотрудника».
  • NewRoleId не найден: ошибка «Новая роль для назначения не найдена».
  • NewRoleId не принадлежит тенанту: ошибка «Новая роль для назначения не принадлежит текущему тенанту».

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

События

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