Назначение
Создание роли. Создаёт RoleEntity и RoleScopeReferenceEntity (IncludeScopeIds, ExcludeScopeIds). Требует разрешение Identity.Roles.Create.
Цели
- Создать RoleEntity с уникальным Code
- Опционально привязать RoleTemplateId
- Создать RoleScopeReferenceEntity для IncludeScopeIds и ExcludeScopeIds
Command: AddRoleCommand
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|
| Name | string | Да | Название роли |
| Code | string | Да | Уникальный код роли |
| IncludeScopeIds | IReadOnlyCollection<long>? | Нет | Scope для включения (Action = Include) |
| ExcludeScopeIds | IReadOnlyCollection<long>? | Нет | Scope для исключения (Action = Exclude) |
| RoleTemplateId | long? | Нет | Идентификатор шаблона роли |
Result: AddRoleCommandResult
| Поле | Тип | Обязательное | Описание |
|---|
| RoleId | long | Да | Идентификатор созданной роли |
Бизнес-логика
Основной сценарий
- Начать транзакцию (ReadCommitted).
- Проверить уникальность Code через
roleEntityRepository.Any.
- Если Code существует — ошибка «Код роли уже существует».
- Если RoleTemplateId указан — проверить существование шаблона.
- Валидировать все ScopeIds (IncludeScopeIds, ExcludeScopeIds) через roleScopeEntityRepository.GetByIds.
- Создать RoleEntity (TenantId из контекста).
- Создать RoleScopeReferenceEntity для каждого IncludeScopeIds и ExcludeScopeIds.
- Проверить уникальность ScopeId в рамках роли (без дубликатов).
- Commit.
- Вернуть RoleId.
Альтернативные сценарии
- Код роли уже существует: ошибка «Код роли уже существует».
- Шаблон роли не найден: ошибка «Шаблон роли не найден».
- Не все scope существуют: ошибка «Не все записи scope существуют».
- Дубликаты ScopeId: ошибка «ScopeId должен быть уникальным для RoleId».
Диаграмма алгоритма
Связанные сущности