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:
co-authored by
Claude Sonnet 5
parent
351454c018
commit
0100986a46
@@ -82,3 +82,14 @@ func DeleteSumodule(id uint) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AllSubmodulesConModulo devuelve todos los submódulos con su módulo cargado.
|
||||||
|
//
|
||||||
|
// Lo usa el menú para los administradores: como entran a todas las rutas,
|
||||||
|
// tienen que ver todos los enlaces. Con Preload porque el menú agrupa por el
|
||||||
|
// título del módulo, y sin él quedaría todo bajo un grupo vacío.
|
||||||
|
func AllSubmodulesConModulo() ([]Submodules, error) {
|
||||||
|
var items []Submodules
|
||||||
|
err := app.Http.Database.DB.Preload("Module").Order("id ASC").Find(&items).Error
|
||||||
|
return items, err
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package middlewares
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -43,7 +44,20 @@ func MenuMiddleware(c *fiber.Ctx) error {
|
|||||||
// Organizar los módulos y submódulos
|
// Organizar los módulos y submódulos
|
||||||
moduleMap := make(map[string][]map[string]string)
|
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
|
// Recuperar el nombre del módulo
|
||||||
moduleName := submodule.Module.Title
|
moduleName := submodule.Module.Title
|
||||||
// Crear un mapa para cada submódulo que contenga el título y la URL
|
// Crear un mapa para cada submódulo que contenga el título y la URL
|
||||||
|
|||||||
Reference in New Issue
Block a user