Skip to content

Commit 5c853fb

Browse files
committed
feat(arch): enforce strict hierarchical ownership and enterprise audit standards (EN/ES)
1 parent 8279c06 commit 5c853fb

6 files changed

Lines changed: 219 additions & 235 deletions

File tree

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
1-
# ADR 0028: Modelo de Gobernanza y Autorización Centrado en el Perfil
1+
# ADR 0028: Modelo de Gobernanza y Autorización Centrado en el Perfil Enterprise
22

33
## Estatus
4-
Propuesto
4+
Refactorizado (Estándares Enterprise)
55

66
## Contexto
7-
El modelo de autorización anterior dependía de una asociación directa entre Usuarios, Roles y Permisos. Esto generaba inconsistencias conceptuales donde las anulaciones de permisos para un usuario específico requerían la creación de un nuevo rol o la gestión de asignaciones ad-hoc, complicando la gobernanza y la auditoría. Existe la necesidad de una entidad central que encapsule todo el contexto de una autorización (Usuario, Rol, Sistema, Sucursal e Inquilino) y sirva como contenedor para las "Autorizaciones Efectivas".
7+
Los modelos RBAC estándar fallan en entornos empresariales multi-inquilino y multi-sistema donde los permisos están contextualizados por la estructura organizacional (Sucursales) y los límites funcionales (Sistemas). La asignación directa usuario-rol crea brechas de gobernanza. Un modelo robusto debe aislar los roles dentro de los sistemas y consolidar la autoridad en un único pivote contextual: el **Perfil**.
88

99
## Decisión
10-
Haremos la transición a un **Modelo de Autorización Centrado en el Perfil**.
10+
Implementaremos un **Modelo de Autorización Centrado en el Perfil Enterprise** gobernado por las siguientes reglas estrictas:
1111

12-
1. **El Perfil como Eje de Gobernanza**:
13-
* Un **Perfil** es la unidad atómica de autorización.
14-
* Es una composición contextual de: `UserId` + `RoleId` + `SystemId` + `BranchId` + `TenantId`.
15-
* Un usuario puede tener múltiples perfiles (ej. "Gerente en Sucursal A" y "Auditor en Sucursal B").
12+
1. **Propiedad Jerárquica Estricta**:
13+
* Un **Inquilino (Tenant)** posee sus **Usuarios**, **Sistemas (Suites)** y **Sucursales (Branches)**.
14+
* Un **Sistema** pertenece a un único Inquilino.
15+
* Un **Rol** pertenece a un único Sistema. Los roles globales están prohibidos.
16+
* Un **Permiso** pertenece al contexto funcional de un Sistema.
1617

17-
2. **Persistencia de Autorizaciones Efectivas**:
18-
* En lugar de resolver los permisos al vuelo desde los roles, el conjunto final de autorizaciones se persistirá a nivel de **Perfil** en una tabla `ProfilePermissions`.
19-
* Esto permite **Anulaciones (Overrides)** granulares (agregar o eliminar permisos) para un perfil específico sin afectar a otros usuarios que comparten el mismo Rol.
18+
2. **El Perfil como Nexo Contextual**:
19+
* El **Perfil** es la intersección única de: `Tenant` + `Sistema` + `Sucursal` + `Usuario` + `Rol`.
20+
* Las autorizaciones se resuelven y persisten a nivel de **Perfil** como "Permisos Efectivos".
2021

21-
3. **Estándares de Trazabilidad y Auditoría**:
22-
* Todos los cambios de autorización deben rastrearse con un `TransactionId` o `AuditId`.
23-
* Cada entidad en el sistema seguirá el **Esquema de Auditoría Corporativa Estándar** (Created, Updated, Deleted, Version, Status).
22+
3. **Estándares de Gobernanza y Auditoría**:
23+
* Cada entidad debe implementar el **Esquema de Auditoría Corporativa** (más de 10 columnas).
24+
* El soporte para **Soft Delete**, **Bloqueo Optimista** y **Pistas de Auditoría** es obligatorio para todas las operaciones de persistencia.
25+
* **Trazabilidad**: Las operaciones críticas de seguridad deben rastrear `CorrelationId`, `AuditId` y `TransactionId`.
2426

25-
4. **Desacoplamiento**:
26-
* **Rol**: Un esquema base de permisos.
27-
* **Perfil**: Una implementación contextual de un Rol para un Usuario y una Sucursal específicos.
27+
4. **Motor de Autorización**:
28+
* El motor resuelve los permisos consultando la tabla de **Permisos Efectivos** para el `ProfileId` actual.
29+
* Admite **Anulaciones (Overrides)** (Conceder/Denegar) a nivel de Perfil para una granularidad máxima.
2830

2931
## Implementación Técnica
30-
* La tabla `Users` ya no estará vinculada directamente a `Roles`.
31-
* La tabla `Profiles` se convierte en el punto de unión central.
32-
* El `Motor de Autorización` resolverá los permisos consultando el **ID del Perfil Activo** en el contexto de ejecución.
32+
* **Cardinalidad**: `Tenant (1:N) Sistema (1:N) Rol (1:N) Perfil`.
33+
* **Persistencia**: Los permisos efectivos se proyectan desde `Role -> ProfilePermission` al crear/sincronizar el perfil.
3334

3435
## Consecuencias
35-
* **Positivo**: Granularidad perfecta para anulaciones, auditoría simplificada (un solo lugar para ver qué puede hacer un usuario en un contexto específico) y mejor alineación con estructuras organizacionales complejas.
36-
* **Negativo**: Mayor número de filas en las tablas de permisos (`ProfilePermissions`) y necesidad de lógica para mantener los perfiles sincronizados con sus roles/plantillas de origen cuando sea necesario.
36+
* **Positivo**: Aislamiento perfecto, resolución contextual simplificada, auditabilidad total y escalabilidad masiva para entornos multi-organización.
37+
* **Negativo**: Mayor gestión de metadatos y requerimiento de una lógica de sincronización robusta entre Roles y Perfiles.
Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
1-
# ADR 0028: Profile-Centric Authorization and Governance Model
1+
# ADR 0028: Enterprise Profile-Centric Authorization and Governance Model
22

33
## Status
4-
Proposed
4+
Refactored (Enterprise Standards)
55

66
## Context
7-
The previous authorization model relied on a direct association between Users, Roles, and Permissions. This led to conceptual inconsistencies where permission overrides for a specific user required creating a new role or managing ad-hoc assignments, complicating governance and audit. There is a need for a central entity that encapsulates the entire context of an authorization (User, Role, System, Branch, and Tenant) and serves as the container for "Effective Permissions".
7+
Standard RBAC models fail in multi-tenant, multi-suite enterprise environments where permissions are contextualized by organizational structure (Branches) and functional boundaries (Systems). Direct user-role assignment creates governance gaps. A robust model must isolate roles within systems and consolidate authority at a single contextual pivot: the **Profile**.
88

99
## Decision
10-
We will transition to a **Profile-Centric Authorization Model**.
10+
We will implement an **Enterprise Profile-Centric Authorization Model** governed by the following strict rules:
1111

12-
1. **Profile as the Governance Axis**:
13-
* A **Profile** is the atomic unit of authorization.
14-
* It is a contextual composition of: `UserId` + `RoleId` + `SystemId` + `BranchId` + `TenantId`.
15-
* A user can have multiple profiles (e.g., "Manager in Branch A" and "Auditor in Branch B").
12+
1. **Strict Hierarchical Ownership**:
13+
* A **Tenant** owns its **Users**, **Systems (Suites)**, and **Branches**.
14+
* A **System** belongs to a single Tenant.
15+
* A **Role** belongs to a single System. Global roles are prohibited.
16+
* A **Permission** belongs to the functional context of a System.
1617

17-
2. **Effective Permission Persistence**:
18-
* Instead of resolving permissions on-the-fly from roles, the final set of authorizations will be persisted at the **Profile** level in a `ProfilePermissions` table.
19-
* This allows for granular **Overrides** (adding or removing permissions) for a specific profile without affecting other users sharing the same Role.
18+
2. **Profile as the Contextual Nexus**:
19+
* The **Profile** is the unique intersection of: `Tenant` + `System` + `Branch` + `User` + `Role`.
20+
* Authorizations are resolved and persisted at the **Profile** level as "Effective Permissions".
2021

21-
3. **Traceability and Audit Standards**:
22-
* All authorization changes must be tracked with a `TransactionId` or `AuditId`.
23-
* Every entity in the system will follow the **Standard Corporate Audit Schema** (Created, Updated, Deleted, Version, Status).
22+
3. **Governance & Audit Standards**:
23+
* Every entity must implement the **Corporate Audit Schema** (10+ columns).
24+
* Support for **Soft Delete**, **Optimistic Locking**, and **Audit Trails** is mandatory for all persistence operations.
25+
* **Traceability**: Critical security operations must track `CorrelationId`, `AuditId`, and `TransactionId`.
2426

25-
4. **Decoupling**:
26-
* **Role**: A blueprint of permissions.
27-
* **Profile**: A contextual implementation of a Role for a specific User and Branch.
27+
4. **Authorization Engine**:
28+
* The engine resolves permissions by querying the **Effective Permissions** table for the current `ProfileId`.
29+
* Supports **Overrides** (Grant/Deny) at the Profile level for maximum granularity.
2830

2931
## Technical Implementation
30-
* The `Users` table will no longer be directly linked to `Roles`.
31-
* The `Profiles` table becomes the central junction point.
32-
* The `Authorization Engine` will resolve permissions by querying the **Active Profile ID** in the execution context.
32+
* **Cardinality**: `Tenant (1:N) System (1:N) Role (1:N) Profile`.
33+
* **Persistence**: Effective permissions are projected from `Role -> ProfilePermission` upon profile creation/sync.
3334

3435
## Consequences
35-
* **Positive**: Perfect granularity for overrides, simplified audit (one place to see what a user can do in a specific context), and better alignment with complex organizational structures.
36-
* **Negative**: Higher number of rows in the permission tables (`ProfilePermissions`) and the need for logic to keep profiles in sync with their source roles/templates when required.
36+
* **Positive**: Perfect isolation, simplified contextual resolution, full auditability, and massive scalability for multi-org environments.
37+
* **Negative**: Increased metadata management and the requirement for a robust synchronization logic between Roles and Profiles.

architecture/blueprints-es/architecture-spec.md

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -402,18 +402,23 @@ Para ver el diseño detallado, tipos de datos específicos de SQL Server y polí
402402

403403
## 🏗️ 14. Flujo de Plantillas de Autorización y Herencia
404404

405-
El UMS implementa un sistema desacoplado de gestión de autorizaciones donde los permisos se agrupan en **Suites** y se estandarizan mediante **Plantillas de Permisos**.
406-
407-
### 14.1 Ciclo de Vida y Gobernanza
408-
* **Definición**: Las plantillas se definen a nivel de Sistema (Global) o de Inquilino (Local).
409-
* **Herencia**: Los roles se crean seleccionando una versión de Plantilla. El sistema admite la **Inicialización Estática** (copia al crear) y la **Sincronización Vinculada** (actualizaciones dinámicas).
410-
* **Versionado**: Las plantillas utilizan el versionado semántico (v1.0.0). Los roles pueden actualizarse a versiones más nuevas de las plantillas mediante un flujo de migración controlado.
411-
412-
### 14.2 Modelo de Desacoplamiento
413-
1. **Sistema/Suite**: El límite funcional (ej. ERP, CRM).
414-
2. **Plantilla de Permisos**: El esquema reutilizable.
415-
3. **Rol/Perfil**: La implementación específica del inquilino.
416-
4. **Autorización Efectiva**: El conjunto final de permisos resultante de la herencia de la plantilla más las anulaciones específicas del inquilino.
405+
El UMS implementa un sistema de gestión de autorizaciones desacoplado y jerárquico donde la autoridad se resuelve a nivel de **Perfil** dentro de una estructura multi-inquilino estrictamente aislada.
406+
407+
### 14.1 Propiedad Jerárquica
408+
* **Núcleo del Tenant**: El Tenant es el ancla raíz; posee los **Sistemas (Suites)** y las **Sucursales (Branches)**.
409+
* **Alcance del Sistema**: Un **Sistema** posee sus **Roles** y **Permisos** específicos. No existen roles globales; cada rol está contenido dentro de un límite de Sistema.
410+
* **Nexo del Perfil**: Un **Perfil** es la tupla contextual única: `(Tenant + Sistema + Sucursal + Usuario + Rol)`.
411+
412+
### 14.2 Ciclo de Vida y Gobernanza
413+
* **Herencia**: Los roles se crean a partir de Plantillas específicas del Sistema. Los perfiles se crean a partir de Roles.
414+
* **Persistencia Efectiva**: Las autorizaciones finales se persisten a nivel de **Perfil** para permitir **Anulaciones (Overrides)** granulares (Conceder/Denegar) sin afectar al Rol base.
415+
* **Versionado**: Todas las plantillas y perfiles efectivos admiten el versionado semántico y flujos de migración controlados.
416+
417+
### 14.3 Modelo de Desacoplamiento
418+
1. **Sistema/Suite**: El límite funcional (ej. ERP, CRM) propiedad de un Inquilino.
419+
2. **Rol**: El esquema base de permisos dentro de un Sistema.
420+
3. **Perfil**: La implementación contextual para un Usuario y Sucursal específicos.
421+
4. **Autorización Efectiva**: El conjunto final de permisos persistido y auditado para un Perfil.
417422

418423

419424

0 commit comments

Comments
 (0)