fix: seeds ya no reasignan módulos a roles restringidos + Query Runner con alcance real

- Los seeds que creaban módulos nuevos asignaban esos submódulos a TODOS los
  roles en cada arranque (idempotente contra re-agregar lo ya quitado, pero
  igual tocaba roles personalizados/restringidos por primera vez apenas
  existían). Ahora solo se asignan automáticamente al rol "Administrador";
  cualquier rol restringido que crees para un empleado ya no recibe módulos
  nuevos sin que tú se los habilites a propósito desde /app/roles.

- Se revierte el bloqueo "solo administrador" que había puesto en
  /query-runner/run y /run-batch: bloqueaba también a usuarios con el
  submódulo Query Runner correctamente asignado a su rol. En su lugar se
  agrega la validación real que faltaba — RunQuery/RunBatchQuery no
  verificaban que el conx_db_id recibido perteneciera al rol del usuario
  (solo el listado de conexiones del selector estaba filtrado); ahora si no
  es admin, se verifica contra Role.ConxDBs antes de ejecutar cualquier SQL.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro GD
2026-08-03 19:56:48 +00:00
co-authored by Claude Opus 5
parent 5ac70a4d6e
commit 21f968c532
3 changed files with 101 additions and 53 deletions
+6 -2
View File
@@ -141,8 +141,12 @@ func UserRoutes(app fiber.Router) {
protected.Get("/query-runner/databases", controllers.GetDatabases)
protected.Get("/query-runner/tables", controllers.GetTables)
protected.Get("/query-runner/test", controllers.TestConnection)
protected.Post("/query-runner/run", middlewares.SoloAdmin, controllers.RunQuery)
protected.Post("/query-runner/run-batch", middlewares.SoloAdmin, controllers.RunBatchQuery)
// Sin SoloAdmin a propósito: RunQuery/RunBatchQuery ya limitan el alcance
// internamente (un no-admin solo ve/consulta las conexiones que su rol
// tiene asignadas vía Role.ConxDBs). El acceso real se controla asignando o
// no el submódulo "Query Runner" a su rol, no aquí.
protected.Post("/query-runner/run", controllers.RunQuery)
protected.Post("/query-runner/run-batch", controllers.RunBatchQuery)
protected.Get("/query-runner/history", controllers.GetHistory)
protected.Delete("/query-runner/history", controllers.ClearHistory)
protected.Post("/query-runner/export/csv", controllers.ExportCSV)