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
|
||||
}
|
||||
|
||||
// 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 (
|
||||
"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
|
||||
|
||||
Reference in New Issue
Block a user