Apariencia
0015. Los permisos no viajan en el JWT
Estado
Aceptada
Contexto
Cambiar la matriz de permisos de un rol debe aplicar de inmediato a todos sus usuarios, sin forzar un re-login masivo.
Decisión
El JWT solo lleva identidad + roleId, nunca los permisos resueltos. El PermissionGuard resuelve los permisos en cada request vía PermissionsService.getPermissionsForRole, con cache Redis y fallback a PostgreSQL; al mutar la matriz de un rol se invalida la cache con invalidateRolePermissions.
Consecuencias
Cambiar permisos aplica al instante sin re-emitir tokens. Deuda conocida: la UI del admin puede seguir mostrando opciones ya revocadas hasta que se renueva la sesión, aunque el backend ya responde 403 al instante. Opciones futuras: re-fetch de /auth/me periódico o al recibir un 403.