Saltar al contenido

Cuality GAC S.A.S. · Gestión en Acreditación y Calidad

La llave arma el menú

Un sistema para que los evaluadores hagan estudios de puesto de trabajo a los empleados de las empresas cliente.

Yo fundé su base: los repositorios, la arquitectura y un sistema de permisos en el que cada llave decide qué pantallas y qué botones existen para cada persona.

Fundé la baseNo productivoEne – mar 2026

Qué es y quién hizo qué

Los evaluadores de Cuality GAC hacen estudios de puesto de trabajo a los empleados de sus empresas cliente: qué exige cada cargo, en qué condiciones se trabaja y cuál es el riesgo. El sistema tiene dos pisos, y cada uno tiene su autor.

Arriba: los estudios de puesto

Lo construyó otro desarrollador
  • Empresas y centros de trabajo
  • Empleados, cargos y funciones
  • Antecedentes y diagnósticos
  • Demandas biomecánicas, antropométricas y fisiológicas
  • Condiciones ambientales y clase de riesgo
  • Conclusiones y recomendaciones del evaluador

Abajo: la base

La monté yo
  • Los dos repositorios, creados el 21 de enero de 2026
  • Arquitectura en tres capas: .NET 8 y Angular 19
  • Inicio de sesión con JWT y claves con BCrypt
  • Usuarios, roles y permisos, con su administración
  • Políticas creadas al vuelo y caché por usuario
  • El árbol de pantallas que arma el menú

Permisos que arman el menú

Hacían falta permisos finos desde el primer día, con menús y botones que aparecen según lo que cada quien puede hacer, sin escribir una política por cada permiso.

Baja con el scroll: el sello del logo se inclina y se vuelve el árbol de pantallas. Al final, el llavero queda en tus manos. El árbol es un ejemplo armado con los códigos de permiso reales de la base.

CualityTableroAdministraciónReportesResumenUsuariosRolesInformesAuditorías
  1. Todo cuelga de un sello

    Cada módulo, página y botón de Cuality es un nodo de un árbol, y cada nodo pide un permiso. Desde arriba se ve como el sello del logo: anillos de módulos, páginas y botones.

  2. El llavero del usuario

    Cada usuario junta llaves de dos lados: las que trae su rol y las que se le asignaron directo. Las azules vienen del rol; la gris es directa.

  3. La forja: una política al vuelo

    Un endpoint pide permiso con un nombre, como ROLES_CREATE. Nadie registró una política con ese nombre: el proveedor de políticas la crea en el momento. Así no hay que escribir una política por cada permiso.

    [Authorize(Policy = PermissionCodes.ROLES_CREATE)]
  4. La caché del usuario

    La primera vez se leen de la base los permisos del rol y los directos, y quedan en caché por usuario. Así no hay que consultar la base en cada petición para saber qué puede hacer cada quien.

  5. El árbol se enciende

    Solo se levantan los nodos cuyo permiso está en el llavero. Los demás quedan planos y no llegan al menú.

  6. El menú se arma

    El backend devuelve solo las ramas permitidas y el frontend arma el menú con ellas. Los botones aparecen con una directiva que pregunta por su permiso. Prueba: activa y desactiva llaves.

    Llavero del usuario de ejemplo

    Del rol Directa o agregada por ti

    CualityUsuario de ejemplo

    Usuarios

    Crear usuario

El error que solo aparecía en el servidor

Las fotos de usuario se guardaban dentro de la carpeta pública del proyecto web. Al publicar la aplicación en un servidor, esa carpeta no existía y la carga fallaba.

El almacenamiento pasó a una carpeta propia que se crea si falta y se sirve como estática, sin depender de la estructura del proyecto web.

Dónde se guarda la foto
  • sitio publicado/
  • wwwroot/ no existe

DirectoryNotFoundException: la carga de la foto falla.

Acta de entrega de la base

Construcción inicial completa. Repositorios creados por mí en enero de 2026.

Repositorios
Creados por mí el 21 de enero de 2026
Construcción inicial
Backend: 100 archivos. Frontend: 72 archivos.
Lo que entregué
La base: arquitectura, autenticación, permisos y menú
Lo que integré
Los cambios de otro desarrollador, hasta marzo de 2026
Lo que no es mío
Los módulos de estudios de puesto de trabajo
Código vivo mío
Cerca del 39 % del backend y el 9 % del frontend, según git blame

Arranqué el proyecto: creé los repositorios y monté la base, con arquitectura .NET 8 y Angular 19, autenticación JWT y permisos granulares que también arman el menú. Después lo entregué, y los módulos de estudios los construyó otro desarrollador.

Sicer BritoFundé la baseNo productivo

Lo que todavía falta

Nunca salió a producción.

La base se entregó en enero de 2026, y sobre ella siguió el trabajo de otro desarrollador hasta junio de 2026.

Con qué está hecho

  • .NET 8API en tres capas
  • EF Core 8Entidades de seguridad y sus migraciones
  • PostgreSQLLa base
  • Angular 19Componentes independientes
  • JWTInicio de sesión
  • Angular MaterialComponentes de la interfaz