Estado del Documento: Producción
Alcance Autoritativo: Arquitectura Global de la Plataforma
Referencia del Marco de Trabajo Padre: Evolith Architecture Reference
El Sistema de Gestión de Usuarios (UMS, por sus siglas en inglés) está diseñado como un Monolito Modular que se adhiere a los principios de la Arquitectura Limpia (Arquitectura Hexagonal), Diseño Guiado por el Dominio (DDD) estricto y Aislamiento de Inquilinos estricto.
UMS actúa como una pasarela de autorización e identidad que puede funcionar de forma independiente o integrarse con Proveedores de Identidad (IdPs) corporativos externos a través de los protocolos OpenID Connect (OIDC), SAML 2.0 o WS-Federation.
┌─────────────────────────────────────────────────────────┐
│ Capa de Presentación │
│ React 18 + Vite (SPA) / Web API / GraphQL / REST │
└────────────┬───────────────────────────────▲────────────┘
│ Comandos │ Consultas / DTOs
▼ │
┌────────────────────────────────────────────┴────────────┐
│ Capa de Aplicación │
│ Manejadores CQRS / Casos de Uso / Pipelines / DTOs │
└────────────┬───────────────────────────────▲────────────┘
│ Invoca │ Implementa
▼ │
┌────────────────────────────────────────────┴────────────┐
│ Capa de Dominio │
│ POCOs Puros de Agregados / Objetos de Valor / Event │
└────────────▲───────────────────────────────┬────────────┘
│ Implementa │ Integra
│ ▼
┌────────────┴────────────────────────────────────────────┐
│ Capa de Infraestructura │
│ PostgreSQL (EF Core/Npgsql) / Dapr / Outbox / Outbound │
└─────────────────────────────────────────────────────────┘
{BoundedContext}.Domain) consta de objetos C# puros (POCOs) con cero referencias a bibliotecas externas, asegurando que la lógica de negocio permanezca incontaminada.UMS conecta a múltiples actores y suites externas para proporcionar una gestión de acceso unificada.
graph TD
User["Usuario Final (Navegador/Cliente)"] -->|HTTPS GraphQL/REST| Gate["API Gateway / BFF"]
Admin["Administrador de Inquilino"] -->|HTTPS Config| Gate
SysAdmin["Admin de Sistema de Plataforma"] -->|Mantenimiento Global| Gate
Gate -->|UMS.API| Core["Motor Central UMS"]
subgraph Sistemas Externos
IDP["IdPs Externos (OIDC/SAML/ADFS)"]
CRM["ERP/CRM Empresarial (Referencia CRM)"]
end
Core -->|Verificación de DNS y Metadatos| IDP
Core -->|Sincronización de Referencia de Inquilino| CRM
subgraph Persistencia e Infraestructura
DB[("PostgreSQL (Inquilinos Aislados)")]
Dapr["Sidecar Dapr (Sagas/PubSub)"]
end
Core -->|EF Core/Npgsql / RLS de Inquilino| DB
Core -->|Bus de Eventos / Flujos de Trabajo| Dapr
UMS se divide en seis Contextos Delimitados altamente cohesivos:
flowchart TD
Identity["Identidad BC"]
Authorization["Autorización BC"]
Configuration["Configuración BC"]
Approvals["Aprobaciones BC"]
IGA["IGA BC"]
Audit["Auditoría BC"]
Identity -->|Publica: Eventos de Inquilino/Usuario| Configuration
Identity -->|Publica: Eventos de Inquilino/Sucursal| Authorization
Identity -->|Ámbito y Referencia del Actor| Approvals
Identity -->|Proporciona Contexto de Identidad| Audit
Authorization -->|Aplica Contexto de Acceso| Approvals
Authorization -->|Consume para Análisis de Elevación| IGA
Authorization -->|Publica: Eventos de Perfil/Permiso| Audit
Configuration -->|Feature Flags y parámetros de IdP| Identity
Approvals -->|Eleva Roles / Aprueba Cambios| Authorization
Approvals -->|Activa Notificaciones| Audit
IGA -->|Solicita Promoción / Recertificación de Roles| Approvals
style Audit fill:#f9f,stroke:#333,stroke-width:2px
| Contexto Aguas Arriba (Upstream) | Contexto Aguas Abajo (Downstream) | Tipo de Relación | Patrón de Integración |
|---|---|---|---|
| Identidad | Configuración | Aguas Arriba - Aguas Abajo | Cliente-Proveedor (El registro del inquilino siembra la config) |
| Identidad | Autorización | Aguas Arriba - Aguas Abajo | Cliente-Proveedor (La sucursal/usuario define el ámbito) |
| Identidad | Aprobaciones | Aguas Arriba - Aguas Abajo | Núcleo Compartido (Shared Kernel - Identidades) |
| Configuración | Identidad | Aguas Arriba - Aguas Abajo | Conformista (Las flags dinámicas regulan funciones) |
| Autorización | IGA | Aguas Arriba - Aguas Abajo | Asociación (Partnership - IGA evalúa estructuras de roles) |
| IGA | Aprobaciones | Aguas Arriba - Aguas Abajo | Cliente-Proveedor (Promociones activan aprobaciones) |
| Todos los Contextos | Auditoría | Aguas Abajo | Publicación-Suscripción (Eventos de Transactional Outbox) |
Todas las reglas de negocio, invariantes y diagramas arquitectónicos se consolidan estrictamente dentro del documento dedicado de cada agregado.
/docs/domain/ (Traducciones en /docs/domain-es/)
├── identity/
│ ├── tenant.md - Unidad organizacional de nivel superior y jerarquía
│ ├── branch.md - Sucursales que delimitan usuarios y perfiles
│ ├── branding.md - Perfiles visuales de marca blanca por inquilino
│ ├── identity-provider.md - Mapeos de IdP externos OIDC/SAML
│ ├── user-account.md - Perfiles de login y ciclos de vida de usuarios
│ ├── password-credential.md - Hashes de contraseñas seguros y políticas
│ └── mfa-enrollment.md - Factores de MFA (SMS, Email, TOTP)
│
├── authorization/
│ ├── system-suite.md - Aplicaciones principales y opciones del sistema
│ ├── module.md - Zonas funcionales dinámicas
│ ├── menu.md - Estructura de menús navegables
│ ├── sub-menu.md - Submenús anidados
│ ├── option.md - Interfaces e interfaces de acceso del usuario
│ ├── action.md - Tokens granulares de operación (Read/Write/Delete)
│ ├── permission-template.md - Grupos de permisos preestablecidos
│ ├── permission-template-item.md - Mapeos individuales dentro de un template
│ ├── profile.md - Roles dinámicos (Global, Inquilino, Sucursal)
│ └── profile-permission.md - Permisos y acciones asignadas a perfiles
│
├── configuration/
│ ├── app-configuration.md - Configuración del entorno del inquilino
│ ├── feature-flag.md - Interruptores operativos
│ ├── flag-evaluation-log.md - Registro de evaluaciones para pruebas A/B
│ └── idp-configuration.md - Secretos técnicos del cliente y llaves de IdPs
│
├── approvals/
│ ├── approval-workflow.md - Flujo de aprobaciones por humanos
│ ├── approval-required-document.md - Lista de documentos requeridos
│ ├── approval-request.md - Ciclo de vida de solicitudes de aprobación
│ ├── document-type.md - Definiciones estructuradas de tipos de archivos
│ ├── notification-rule.md - Alertas de notificaciones automatizadas
│ ├── user-document.md - Documentos de usuario cargados para validación
│ ├── access-notification.md - Alertas de seguridad por elevación
│ └── access-enforcement-policy.md - Políticas de restricción y límites
│
├── iga/
│ ├── promotion-request.md - Propuestas de elevación de acceso empresarial
│ ├── promotion-impact-analysis.md - Análisis de colisiones y riesgos SoD
│ └── role-maturity-status.md - Análisis dinámico de asignación de perfiles
│
└── audit/
└── audit-record.md - Bitácora inmutable de eventos de seguridad
Para preservar la pureza de los contextos delimitados de DDD al tiempo que se mantiene la cohesión del sistema, se deben seguir estrictamente los siguientes estándares:
Cada operación que cambie el estado dentro de un agregado debe publicar eventos en una tabla local outbox dentro de la misma transacción de base de datos. Un despachador asíncrono lee estas entradas y las reenvía a Dapr PubSub para su entrega entre contextos. Esto garantiza una consistencia eventual confiable sin transacciones distribuidas de dos fases (2PC).
Los agregados en contextos aguas abajo NUNCA deben tener referencias directas a entidades de contextos aguas arriba. En su lugar, hacen referencia únicamente a su identificador global (TenantId, UserId, BranchId, etc.) almacenado como un Objeto de Valor.
Cuando un contexto se integra con directorios de identidad externos o sistemas de Recursos Humanos heredados, se construye una Capa Anticorrupción explícita (con Adaptadores, Traductores y Fachadas) dentro de la capa de infraestructura para evitar que los conceptos externos contaminen el modelo de dominio puro.
Result<T> que mapea claramente los casos de falla.| Volver al Índice Maestro | Ir al Índice de Dominio |