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

UpdateRoleCommand

Назначение

Обновление роли: Name, Code, RoleTemplateId и полная синхронизация RoleScopeReferenceEntity с IncludeScopeIds и ExcludeScopeIds. Требует разрешение Identity.Roles.Update.

Цели

  • Обновить RoleEntity (Name, Code, RoleTemplateId)
  • Синхронизировать RoleScopeReferenceEntity с command (удалить лишние, добавить новые, обновить Action)

Command: UpdateRoleCommand

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

ПолеТипОбязательноеОписание
RoleIdlongДаИдентификатор роли
NamestringДаНазвание роли
CodestringДаКод роли
IncludeScopeIdsIReadOnlyCollection<long>?НетScope для включения
ExcludeScopeIdsIReadOnlyCollection<long>?НетScope для исключения
RoleTemplateIdlong?НетИдентификатор шаблона роли

Result: UpdateRoleCommandResult

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

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

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

  1. Начать транзакцию (ReadCommitted).
  2. Получить RoleEntity. Если не найдена — ошибка «Роль не найдена».
  3. Проверить TenantId.
  4. Если Code изменился — проверить уникальность.
  5. Если RoleTemplateId указан — проверить существование шаблона.
  6. Валидировать ScopeIds.
  7. Обновить RoleEntity.
  8. Синхронизировать RoleScopeReferenceEntity: удалить записи, отсутствующие в command; добавить новые; обновить Action при изменении.
  9. Commit.
  10. Вернуть RoleId.

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

  • Роль не найдена: ошибка «Роль не найдена».
  • Роль не принадлежит тенанту: ошибка «Роль не принадлежит текущему тенанту».
  • Код роли уже существует: ошибка «Код роли уже существует».
  • Шаблон роли не найден: ошибка «Шаблон роли не найден».
  • Не все scope существуют: ошибка «Не все записи scope существуют».
  • Дубликаты ScopeId: ошибка.

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

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