Control horario de una auditora
Control de horas de proyectos y personal para una auditora · Desarrollo desde cero, en solitario
Actualizado
Antes
Clientes, proyectos y horas estaban en un único lugar donde cualquiera de la firma podía verlo y cambiarlo todo.
Después
87
casillas de permisos comprobadas contra la base de datos antes de cada despliegue; las 30 que no hacían nada se ocultaron.
- 1Persona:Propietario
Crea roles con casillas por área (clientes, proyectos, horas, informes) para ver, crear, editar y eliminar.
- 2Persona:Miembro del personal
Imputa horas a un cliente, proyecto y tarea, o registra una ausencia.
Sistema:Aplicación webAvisa a quien tenga el parte de horas vacío antes de la fecha límite.
- 3Persona:Administrador de proyecto
Aprueba o rechaza el parte semanal de horas de su propio equipo de proyecto.
- 4Sistema:Base de datos
Muestra a cada persona solo lo que su rol permite: el personal ve sus propias horas, los administradores de proyecto a su equipo y los propietarios todos los clientes.
- 5Persona:Propietario
Consulta las horas por cliente, proyecto y persona en los dashboards e informes.
Siempre activo
- Antes, cualquiera de la firma podía abrir todos los clientes y las horas de todos. Ahora la base de datos rechaza todo lo que un rol no permite, aunque una pantalla lo pida.
- Antes de cada push, se prueba cada rol contra una copia aislada de la base de datos.
Problema
Una auditora gestionaba sus clientes, proyectos y horas del personal en una herramienta donde cualquier persona podía abrir todos los clientes y las horas de todos.
Diagnóstico
El control de acceso falla en silencio cuando vive en la pantalla, así que cada regla debía vivir en la base de datos y demostrarse con pruebas.
Opciones que valoré
Cada rol ve datos distintos. ¿Dónde viven las reglas de acceso?
Elegida
En la propia base de datos, probadas para cada rol antes de cada despliegue
La pantalla no puede filtrar lo que la base de datos rechaza. Coste: una ejecución de pruebas sobre una copia aislada antes de cada push.
Descartada
Solo en las pantallas
Una persona podía ver o cambiar datos que la pantalla pretendía ocultar.
Un registro ya no hace falta. ¿Se borra o se conserva?
Elegida
Archivarlo y anonimizarlo
El historial de partes de horas se mantiene intacto.
Descartada
Borrarlo
Al borrar, el historial de partes de horas desaparece en cascada.
Solución
Una aplicación web de una sola página sobre Postgres gestionado. Cada regla de acceso vive en la base de datos y se demuestra con una matriz automática de roles antes de cada despliegue.
- Aplicación
- React
- Vite
- TanStack Router
- TanStack Query
- shadcn/ui
- Chart.js
- Datos y seguridad
- Supabase
- PostgreSQL row-level security
- Edge Functions (Deno)
- Alojamiento
- Cloudflare
- Calidad
- GitHub Actions
- Role-matrix tests
- Vitest
- Property-based tests
- Accessibility tests
Servicios relacionados
Cifras: Comprobación automática de roles, 2026-09-25