feat: version 3.0.0 -- Correcciones de auditoria de seguridad, accesibilidad y redundancia

Permisos (superadmin, viewer, busqueda, tareas recurrentes), bootstrap atomico,
revocacion de JWT por version de sesion (028), control optimista de edicion (029),
logo sin SVG + CSP, ingesta endurecida, correos escapados, borradores, paginacion
de proyectos, accesibilidad de dialogos/controles e i18n.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-10-23 11:36:02 -05:00
parent 8ed1d63505
commit e65111a7f4
112 changed files with 2285 additions and 651 deletions
+7
View File
@@ -70,6 +70,13 @@
editables directo por el cliente: actividad con tareas = % de tareas hechas; actividad sin
tareas = manual (0-100); proyecto = promedio del avance de sus actividades.
- `users.password_hash` con bcrypt, nunca texto plano ni reversible.
- `users.session_version` (migración `028`) comienza en 1 y aumenta al cambiar/restablecer clave;
cada JWT de sesión debe tener la misma versión. Aplicar la migración antes de iniciar el backend nuevo.
- Migración `029`: `edit_version` comienza en 1 en proyectos, comentarios, actividades, tareas,
departamentos, usuarios, catálogos, notas, tareas recurrentes y equipos. El `UPDATE` de edición
verifica la versión y la incrementa atómicamente; sin coincidencia responde 409. En
`system_settings`, las claves `company_edit_version` y `smtp_edit_version` serializan los
guardados de cada panel dentro de una transacción. Aplicar 029 antes de iniciar el backend nuevo.
- `users.status` (`pending_verification`/`pending_approval`/`active`/`invited`) es el ciclo de vida
de la cuenta, independiente de `is_active` (que sigue siendo el interruptor manual del admin
para desactivar a alguien ya activo). Un usuario `pending_approval` rechazado se **borra**