fix(permisos): compara la ruta completa y avisa de los menús que dan 404
Auditoría del sistema de permisos a partir del 404 en /app/doc/paginas. 1. La comparación de permisos usaba solo el último segmento de la URL (lo que va después del último '/'). Rompía en las dos direcciones: con permiso sobre /app/doc/categorias se entraba a cualquier otra ruta terminada en "categorias", y a la vez el permiso parecía no aplicarse donde sí correspondía porque el segmento coincidía por casualidad. Ahora se compara la ruta completa, cortando en el separador para que /app/doc/paginas no habilite /app/doc/paginas-privadas. 2. El submódulo de Documentación nunca se sembró, aunque las rutas y las vistas existen desde mayo. Había que crear el ítem del menú a mano, y una URL mal tipeada ahí se ve exactamente igual que un permiso mal asignado: un 404. Ahora se siembra con la URL correcta. 3. El submódulo "Statuspage" apuntaba a /app/statuspage, que no existe en ninguna parte — la página real es la pública /status. Se corrige el seed y también el registro ya creado en la base. 4. Chequeo en el arranque que recorre los submódulos de la base y avisa cuáles apuntan a una URL sin ruta. Cubre los creados a mano, que es justo donde el compilador y los tests no llegan. 5. Test que cruza las URLs sembradas contra las rutas registradas: fue el que encontró lo de statuspage. Queda pendiente y es más grande: de 454 rutas protegidas solo 54 pasan por MenuMiddleware. El permiso gatea la página HTML pero no los endpoints de datos — cualquier usuario autenticado puede llamar a GET /app/doc/loadpaginas o DELETE /app/doc/paginas/:id sin tener el submódulo asignado. Se reporta antes de tocarlo porque cerrarlo de golpe puede dejar gente afuera. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
ad3458bb71
commit
105ab44759
@@ -198,6 +198,7 @@ func main() {
|
||||
migrations.SeedPagosExternos()
|
||||
migrations.SeedAutomatizacionIA()
|
||||
migrations.SeedUmind()
|
||||
migrations.SeedDocumentacion()
|
||||
// Va antes de MigrarUmindAgentes: libera las columnas huérfanas que
|
||||
// dejó el refactor multi-agente. Sin esto no se puede insertar nada en
|
||||
// uMind (ver el comentario de la función).
|
||||
@@ -228,6 +229,20 @@ func main() {
|
||||
defer services.DetenerCron()
|
||||
// Cargar rutas
|
||||
routes.LoadRoutes(app.Http.Server.App)
|
||||
|
||||
// Con las rutas ya montadas se puede avisar de los ítems del menú que
|
||||
// apuntan a una URL inexistente — el síntoma es un 404 que parece un
|
||||
// problema de permisos.
|
||||
rutasGET := map[string]bool{}
|
||||
for _, capa := range app.Http.Server.Stack() {
|
||||
for _, r := range capa {
|
||||
if r.Method == "GET" {
|
||||
rutasGET[r.Path] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
migrations.VerificarUrlsDeSubmodulos(rutasGET)
|
||||
|
||||
app.Http.Route404()
|
||||
log.Fatal(app.Http.Server.ServeWithGraceFullShutdown())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user