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

AddRoleCommand

Назначение

Создание роли. Создаёт RoleEntity и RoleScopeReferenceEntity (IncludeScopeIds, ExcludeScopeIds). Требует разрешение Identity.Roles.Create.

Цели

  • Создать RoleEntity с уникальным Code
  • Опционально привязать RoleTemplateId
  • Создать RoleScopeReferenceEntity для IncludeScopeIds и ExcludeScopeIds

Command: AddRoleCommand

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

ПолеТипОбязательноеОписание
NamestringДаНазвание роли
CodestringДаУникальный код роли
IncludeScopeIdsIReadOnlyCollection<long>?НетScope для включения (Action = Include)
ExcludeScopeIdsIReadOnlyCollection<long>?НетScope для исключения (Action = Exclude)
RoleTemplateIdlong?НетИдентификатор шаблона роли

Result: AddRoleCommandResult

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

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

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

  1. Начать транзакцию (ReadCommitted).
  2. Проверить уникальность Code через roleEntityRepository.Any.
  3. Если Code существует — ошибка «Код роли уже существует».
  4. Если RoleTemplateId указан — проверить существование шаблона.
  5. Валидировать все ScopeIds (IncludeScopeIds, ExcludeScopeIds) через roleScopeEntityRepository.GetByIds.
  6. Создать RoleEntity (TenantId из контекста).
  7. Создать RoleScopeReferenceEntity для каждого IncludeScopeIds и ExcludeScopeIds.
  8. Проверить уникальность ScopeId в рамках роли (без дубликатов).
  9. Commit.
  10. Вернуть RoleId.

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

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

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

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