resources/views/pages/frontend/docs/uml-clases-dominio.md
Última modificación: 24 Oct, 2026

2.1 Clases del Dominio: Modelos Core

Este diagrama representa la estructura de clases del dominio nuclear de Mañuti, reflejando las entidades Eloquent en MariaDB, sus atributos principales, métodos de verificación y relaciones de cardinalidad.


1. Explicación y Semántica del Diagrama

El modelo ilustra la separación de conceptos entre la identidad de acceso, la bitácora de actividad y la matriz de privilegios:

  • Usuario: Extiende de Illuminate\Foundation\Auth\User. Encapsula la lógica de autenticación, verificación de permisos mediante hasPermission(), soporte de SoftDeletes y enlace hacia perfiles y sesiones.
  • Role: Representa perfiles organizacionales. Mantiene relaciones Muchos a Muchos (N:M) con usuarios y capacidades.
  • Permission: Define las capacidades atómicas del sistema (slug, module, auditable).
  • Login: Espejo transaccional en SQL que rastrea el puntero de la sesión activa en memoria Redis (session_id).
  • LoginLog: Historial forense inmutable de intentos de autenticación exitosos y fallidos.
  • LostPassword: Tokens de recuperación de acceso asociados al ID del usuario y a un estatus del catálogo.

2. Cómo se Lee este Diagrama

  • Las cajas representan las clases PHP del directorio app/Models/.
  • Los atributos marcados con + representan propiedades públicas o columnas mapeadas.
  • Las relaciones:
    • 1 --> *: Relación Uno a Muchos (hasMany / belongsTo). Un usuario genera múltiples registros de log y mantiene múltiples sesiones históricas.
    • * -- *: Relación Muchos a Muchos (belongsToMany), resuelta a través de tablas intermedias pivote (role_user y permission_role).

3. Implementación en el Framework Mañuti

  • role_user: Pivote con llaves usuario_id y role_id con borrado en cascada.
  • permission_role: Pivote con llaves role_id y permission_id con restricción de unicidad compuesta.
  • Resolución en Memoria: La evaluación de hasPermission(slug) carga ávidamente las relaciones para evitar problemas de consultas $N+1$.

4. Diagrama Mermaid

classDiagram
    class Usuario {
        +id: BigInt
        +usuario: String
        +correo: String
        +password: String
        +hasPermission(slug): Bool
    }
    
    class Role {
        +id: BigInt
        +name: String
        +description: String
    }

    class Permission {
        +id: BigInt
        +slug: String
        +module: String
        +auditable: Boolean
    }

    class Login {
        +session_id: String
        +ip_address: String
        +open: Boolean
    }

    class LoginLog {
        +usuario_input: String
        +exitoso: Boolean
    }

    class LostPassword {
        +usuario_id: BigInt
        +token: String
        +cat_status: BigInt
    }

    %% Relaciones
    Usuario "1" --> "*" Login : tiene
    Usuario "1" --> "*" LoginLog : genera
    Usuario "1" --> "*" LostPassword : solicita
    Usuario "*" -- "*" Role : role_user N-M
    Role "*" -- "*" Permission : permission_role N-M

Enlaces Relacionados

Edita este documento en >> uml-clases-dominio.md
← Volver a la Landing Page