ums

PermissionTemplate — Arquitectura de Agregados

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

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

  1. El Code de la plantilla debe ser único en todo el sistema.
  2. Una plantilla debe contener al menos un PermissionTemplateItem para estar activa.
  3. Si una Action subyacente en SystemSuite se elimina, el PermissionTemplateItem correspondiente se elimina automáticamente en cascada.
  4. Para un PermissionTemplateItem, una plantilla no puede contener mapeos duplicados de ActionId.
  5. 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 |


2. Modelo de Dominio

Clases / Entidades / Objetos de Valor

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

Atributos Principales

| 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 |


3. Diagramas de Modelo de Objetos

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

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

5. Modelo ER

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
    }

Reglas de Aislamiento de Inquilinos


6. Integración de Contexto Delimitado


7. Capa de Aplicación


8. Infraestructura/Persistencia


9. Seguridad y Cumplimiento


10. Decisiones Técnicas


Volver al Índice de Autorización