fix(menu): el administrador no veía los módulos a los que sí puede entrar

El módulo Facturas tiene ruta, vista y seed, pero no aparecía en el menú.
No faltaba: MenuMiddleware arma el menú solo con los submódulos del rol del
usuario, y esa parte corre ANTES del bypass de IsAdmin.

O sea que un administrador entra a cualquier ruta escribiéndola, pero solo
ve en el menú lo que su rol tenga asignado. Un módulo completo puede
parecer inexistente por eso, y no hay nada en pantalla que lo explique.

Ahora, si el usuario es administrador, el menú se arma con todos los
submódulos: coincide con el acceso que ya tiene. Para el resto no cambia
nada — siguen viendo solo lo suyo.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-15 20:56:21 -05:00
co-authored by Claude Sonnet 5
parent 351454c018
commit 0100986a46
2 changed files with 26 additions and 1 deletions
+15 -1
View File
@@ -2,6 +2,7 @@ package middlewares
import (
"fmt"
"log"
"sort"
"strings"
@@ -43,7 +44,20 @@ func MenuMiddleware(c *fiber.Ctx) error {
// Organizar los módulos y submódulos
moduleMap := make(map[string][]map[string]string)
for _, submodule := range userModules.Role.Submodules {
// El administrador entra a todas las rutas (ver más abajo), pero el menú
// se armaba solo con los submódulos de SU rol: podía acceder a una
// pantalla y no tener el enlace por ningún lado. Es lo que hacía que un
// módulo existente —con ruta, vista y seed— pareciera no existir.
visibles := userModules.Role.Submodules
if user.IsAdmin {
if todos, err := models.AllSubmodulesConModulo(); err == nil {
visibles = todos
} else {
log.Printf("[MENU] no se pudo cargar el menú completo para el administrador: %v", err)
}
}
for _, submodule := range visibles {
// Recuperar el nombre del módulo
moduleName := submodule.Module.Title
// Crear un mapa para cada submódulo que contenga el título y la URL