You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Contexto Delimitado: Autorización Raíz de Agregado:PermissionTemplate Módulo:Ums.Domain.Authorization.PermissionTemplate Estado: Producción
1. Visión General del Agregado
Propósito
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.
Responsabilidad de Negocio
Crear y mantener plantillas de seguridad preempaquetadas.
Vincular las Acciones de suite granulares a una plantilla con nombre mediante PermissionTemplateItem.
Facilitar configuraciones de seguridad consistentes y reproducibles entre inquilinos.
Raíz de Agregado
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.
Invariantes y Reglas de Consistencia
El Code de la plantilla debe ser único en todo el sistema.
Una plantilla debe contener al menos un PermissionTemplateItem para estar activa.
Si una Action subyacente en SystemSuite se elimina, el PermissionTemplateItem correspondiente se elimina automáticamente en cascada.
Para un PermissionTemplateItem, una plantilla no puede contener mapeos duplicados de ActionId.
La PermissionKey almacenada debe coincidir exactamente con la clave calculada dentro del catálogo Action en el momento de la validación.
Entidades Relacionadas / Objetos de Valor
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
Eventos de Dominio
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
Comandos / Casos de Uso
Comando
Descripción
CreatePermissionTemplateCommand
Crear una nueva plantilla
AddTemplateItemCommand
Agrega un mapeo de acción (elemento) a la plantilla
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
Loading
4. Diagramas de Secuencia
Flujo para Crear una Plantilla
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
Las plantillas se pueden configurar como Globales (disponibles en toda la plataforma para todos los inquilinos) o Delimitadas por Inquilino (disponibles solo para el inquilino que las creó). Las tablas delimitadas por inquilino incluyen una columna TenantId que admite valores nulos.
PermissionTemplateItem hereda el alcance de aislamiento del agregado padre PermissionTemplate.
6. Integración de Contexto Delimitado
Consume metadatos de Action del agregado SystemSuite y mapea sus identificadores dinámicos.
Los perfiles de seguridad aguas abajo consumen estas plantillas para inicializar permisos de perfiles predeterminados.
Límite de transacción: PermissionTemplateItem se guarda como parte de la persistencia de PermissionTemplate.
Índice: Índice único en Code e índice en TenantId para la plantilla. Índice único en TemplateId, ActionId para los elementos.
9. Seguridad y Cumplimiento
La edición de plantillas globales está restringida al rol Platform:Admin.
La creación de plantillas delimitadas por inquilino está restringida al rol Tenant:Admin.
El alcance administrativo sobre los elementos coincide con las reglas de la plantilla padre.
10. Decisiones Técnicas
El uso de plantillas de inicialización estándar evita la fatiga de configuración manual durante el registro de nuevas organizaciones.
Duplicar la 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.