Назначение
Клонирование роли: создание новой роли с тем же RoleTemplateId и копированием всех RoleScopeReferenceEntity (ScopeId, Action). Требует разрешение Identity.Roles.Create.
Цели
- Создать новую RoleEntity (Name = NewName, Code =
{sourceCode}_copy_{unixTimestamp})
- Скопировать RoleScopeReferenceEntity из исходной роли
Command: CloneRoleCommand
Входные данные
| Поле | Тип | Обязательное | Описание |
|---|
| RoleId | long | Да | Идентификатор роли для клонирования |
| NewName | string | Да | Новое название роли |
Result: CloneRoleCommandResult
| Поле | Тип | Обязательное | Описание |
|---|
| NewRoleId | long | Да | Идентификатор новой роли |
Бизнес-логика
Основной сценарий
- Начать транзакцию (ReadCommitted).
- Получить исходную RoleEntity. Если не найдена — ошибка «Роль не найдена».
- Загрузить RoleScopeReferenceEntity исходной роли.
- Сгенерировать Code:
{sourceCode}_copy_{unixTimestamp} (фигурные скобки — плейсхолдеры для переменных).
- Создать новую RoleEntity (Name = NewName, Code = newCode, RoleTemplateId = source.RoleTemplateId).
- Создать RoleScopeReferenceEntity для каждого scope (ScopeId, Action из исходной роли).
- Commit.
- Вернуть NewRoleId.
Альтернативные сценарии
- Роль не найдена: ошибка «Роль не найдена».
Диаграмма алгоритма
Связанные сущности