From 3516f6e229aadce33235b7cfe9ca65beee601037 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 2 Apr 2026 10:50:18 -0500 Subject: [PATCH] fix: permitir crear/editar formularios a roles con permiso write en lab_formularios MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - _helpers.php: nueva función requireModuleWrite() que verifica session module_permissions - save_formulario.php: reemplaza requireAdmin() por requireModuleWrite('lab_formularios') --- api/lab/_helpers.php | 24 ++++++++++++++++++++++++ api/lab/save_formulario.php | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/api/lab/_helpers.php b/api/lab/_helpers.php index 136f6c7..8346132 100644 --- a/api/lab/_helpers.php +++ b/api/lab/_helpers.php @@ -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) diff --git a/api/lab/save_formulario.php b/api/lab/save_formulario.php index ec84971..e74bccb 100644 --- a/api/lab/save_formulario.php +++ b/api/lab/save_formulario.php @@ -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();