fix: permitir crear/editar formularios a roles con permiso write en lab_formularios

- _helpers.php: nueva función requireModuleWrite() que verifica session module_permissions
- save_formulario.php: reemplaza requireAdmin() por requireModuleWrite('lab_formularios')
This commit is contained in:
Lizandro Guarnizo
2026-04-02 10:50:18 -05:00
parent 69ad9733c1
commit 3516f6e229
2 changed files with 25 additions and 1 deletions
+24
View File
@@ -73,6 +73,30 @@ function requireAdmin(): void {
}
}
/**
* Detiene la ejecución con 403 JSON si el usuario no tiene permiso 'write' sobre el módulo dado.
* Los admins sin role_id tienen acceso total (retrocompat.).
*/
function requireModuleWrite(string $moduleSlug): void {
$role = userRole();
$modules = $_SESSION['admin_user']['modules'] ?? null;
// Enfermero nunca tiene write en módulos de diseño
if ($role === 'enfermero') {
jsonError('Solo permite­o a administradores', 403);
}
// Admin sin modules cargados = acceso total (sistema legacy)
if ($modules === null || ($role === 'admin' && empty($_SESSION['admin_user']['role_id']))) {
return;
}
$perms = $_SESSION['admin_user']['module_permissions'] ?? [];
if (($perms[$moduleSlug] ?? '') !== 'write') {
jsonError('No tienes permiso de escritura en este módulo', 403);
}
}
/**
* Detiene la ejecución si no se puede actuar como enfermero.
* Acepta tanto admins (que pueden actuar en nombre de cualquier enfermera)
+1 -1
View File
@@ -9,7 +9,7 @@
*/
require_once __DIR__ . '/_helpers.php';
requireMethod('POST');
requireAdmin(); // enfermeros NO pueden diseñar formularios
requireModuleWrite('lab_formularios'); // admins y roles con permiso write pueden crear/editar
try {
$datos = inputJson();