Contexto Delimitado: Autorización
Raíz de Agregado: PermissionTemplate
Módulo: Ums.Domain.Authorization.PermissionTemplate
Estado: Producción
El agregado PermissionTemplate define paquetes de derechos de acceso (permisos) estándar y reutilizables mapeados a varios roles del sistema (ej. “Empleado Estándar”, “Administrador de Sucursal”, “Administrador Financiero del Inquilino”). Actúa como un plano estandarizado que simplifica y automatiza el aprovisionamiento de perfiles (roles) dinámicos cuando se registran nuevos inquilinos o se incorporan nuevos usuarios.
PermissionTemplateItem.PermissionTemplate es la raíz del agregado. Los detalles de configuración de elementos secundarios se administran dentro de la colección de entidades propias PermissionTemplateItem.
Code de la plantilla debe ser único en todo el sistema.PermissionTemplateItem para estar activa.Action subyacente en SystemSuite se elimina, el PermissionTemplateItem correspondiente se elimina automáticamente en cascada.PermissionTemplateItem, una plantilla no puede contener mapeos duplicados de ActionId.PermissionKey almacenada debe coincidir exactamente con la clave calculada dentro del catálogo Action en el momento de la validación.| Entidad / VO | Tipo | Propietario |
|—|—|—|
| PermissionTemplateItem | Entidad | Propia |
| TemplateCode | Objeto de Valor | Código de plantilla alfanumérico |
| TemplateName | Objeto de Valor | Descripción y etiqueta de visualización |
| Evento | Desencadenante |
|—|—|
| PermissionTemplateCreatedEvent | Nueva plantilla creada |
| PermissionTemplateUpdatedEvent | Detalles de plantilla modificados |
| PermissionTemplateDeletedEvent | Plantilla eliminada |
| PermissionTemplateItemAddedEvent | Elemento mapeado agregado a la plantilla |
| PermissionTemplateItemRemovedEvent | Elemento mapeado removido de la plantilla |
| Comando | Descripción |
|—|—|
| CreatePermissionTemplateCommand | Crear una nueva plantilla |
| AddTemplateItemCommand | Agrega un mapeo de acción (elemento) a la plantilla |
PermissionTemplate (Raíz de Agregado)
├── Props: PermissionTemplateProps
│ ├── Id: IdValueObject
│ ├── Code: TemplateCode
│ ├── Name: TemplateName
│ ├── Description: string
│ └── IsActive: bool
└── Hijos
└── IReadOnlyList<PermissionTemplateItem>
└── PermissionTemplateItem
├── Props: ItemProps
│ ├── Id: IdValueObject
│ ├── TemplateId: TemplateId
│ ├── ActionId: Guid
│ └── PermissionKey: string
| Entidad | Atributo | Tipo | Notas |
|—|—|—|—|
| PermissionTemplate | Id | Guid | PK |
| PermissionTemplate | Code | string | Único |
| PermissionTemplate | IsActive | bool | Flag de estado |
| PermissionTemplateItem | Id | Guid | PK |
| PermissionTemplateItem | TemplateId | Guid | FK a Template |
| PermissionTemplateItem | ActionId | Guid | FK a Action del sistema |
| PermissionTemplateItem | PermissionKey | string | Clave de caché copiada |
classDiagram
direction TB
class PermissionTemplate {
+Guid Id
+TemplateCode Code
+TemplateName Name
+string Description
+bool IsActive
+List~PermissionTemplateItem~ Items
+Create()
+AddItem()
+RemoveItem()
}
class PermissionTemplateItem {
+Guid Id
+Guid TemplateId
+Guid ActionId
+string PermissionKey
}
PermissionTemplate "1" *-- "0..*" PermissionTemplateItem : contiene
sequenceDiagram
participant C as Cliente
participant H as CreateTemplateHandler
participant R as IPermissionTemplateRepository
participant T as PermissionTemplate (AR)
C->>H: CreatePermissionTemplateCommand(code, name, description)
H->>R: ExistsByCode(code)
R-->>H: false
H->>T: PermissionTemplate.Create(id, code, name, description)
T->>T: Levantar PermissionTemplateCreatedEvent
H->>R: Add(template)
R-->>H: ok
H-->>C: TemplateId
erDiagram
PERMISSION_TEMPLATE ||--o{ PERMISSION_TEMPLATE_ITEM : "contiene"
ACTION ||--o{ PERMISSION_TEMPLATE_ITEM : "referencia"
PERMISSION_TEMPLATE {
uniqueidentifier TemplateId PK
nvarchar Code "Unique"
nvarchar Name
nvarchar Description
bit IsActive
}
PERMISSION_TEMPLATE_ITEM {
uniqueidentifier ItemId PK
uniqueidentifier TemplateId FK
uniqueidentifier ActionId FK
nvarchar PermissionKey
}
TenantId que admite valores nulos.PermissionTemplateItem hereda el alcance de aislamiento del agregado padre PermissionTemplate.Action del agregado SystemSuite y mapea sus identificadores dinámicos.CreatePermissionTemplateCommand -> Entradas: Code, Name, Description -> Retorna: GuidAddTemplateItemCommand -> Entradas: TemplateId, ActionId, PermissionKey -> Retorna: GuidPermissionTemplateItem se guarda como parte de la persistencia de PermissionTemplate.Code e índice en TenantId para la plantilla. Índice único en TemplateId, ActionId para los elementos.Platform:Admin.Tenant:Admin.PermissionKey calculada directamente dentro de la tabla de elementos sirve como una optimización de caché desnormalizada para los cálculos de permisos de alta velocidad.