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.
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.
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.
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.
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)]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.
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ú.
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 ejemploUsuarios
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.
- 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.
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
