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();