feat: 6 nuevas funcionalidades - notas obligatorias turno, reporte enfermero, plantilla WhatsApp, adjuntar orden modal, roles solo lectura, fix valores copago

This commit is contained in:
Lizandro Guarnizo
2026-04-02 09:41:49 -05:00
parent 052a263659
commit d8ceb3f822
14 changed files with 2794 additions and 49 deletions
+37 -12
View File
@@ -485,13 +485,20 @@ function authenticateUser($username, $password) {
$updateLogin = $pdo->prepare("UPDATE admin_users SET last_login = NOW() WHERE id = ?");
$updateLogin->execute([$admin['id']]);
// Cargar módulos del rol
$modules = [];
// Cargar módulos del rol (slug y permiso)
$modules = [];
$modulePermissions = [];
$roleSlug = $admin['role'] ?? 'admin';
if (!empty($admin['role_id'])) {
$modStmt = $pdo->prepare("SELECT module_slug FROM role_modules WHERE role_id = ?");
$modStmt = $pdo->prepare(
"SELECT module_slug, COALESCE(permission,'write') AS permission
FROM role_modules WHERE role_id = ?"
);
$modStmt->execute([$admin['role_id']]);
$modules = array_column($modStmt->fetchAll(PDO::FETCH_ASSOC), 'module_slug');
foreach ($modStmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
$modules[] = $row['module_slug'];
$modulePermissions[$row['module_slug']] = $row['permission'];
}
} elseif ($roleSlug === 'admin') {
// Fallback: admin sin role_id tiene todos los módulos
$modules = array_keys(SYSTEM_MODULES);
@@ -500,14 +507,15 @@ function authenticateUser($username, $password) {
}
return [
'id' => $admin['id'],
'username' => $admin['username'],
'full_name' => $admin['full_name'],
'email' => $admin['email'],
'role' => $roleSlug,
'role_id' => $admin['role_id'] ?? null,
'enfermera_id' => $admin['enfermera_id'] ?? null,
'modules' => $modules,
'id' => $admin['id'],
'username' => $admin['username'],
'full_name' => $admin['full_name'],
'email' => $admin['email'],
'role' => $roleSlug,
'role_id' => $admin['role_id'] ?? null,
'enfermera_id' => $admin['enfermera_id'] ?? null,
'modules' => $modules,
'module_permissions' => $modulePermissions,
];
}
} else {
@@ -609,6 +617,23 @@ function hasModule(string $slug): bool {
return in_array($slug, $modules, true);
}
/**
* Comprueba si el usuario tiene permiso de escritura (write) en el módulo.
* Los administradores tienen acceso de escritura total.
* Un usuario con permission='read' solo puede ver, no modificar.
*/
function hasModuleWrite(string $slug): bool {
// Admins siempre pueden escribir
if (userHasRole('admin')) return true;
$permissions = $_SESSION['admin_user']['module_permissions'] ?? null;
if ($permissions === null) {
// Sesión legacy sin 'module_permissions': si tiene el módulo, se asume write
return hasModule($slug);
}
return ($permissions[$slug] ?? '') === 'write';
}
/**
* Detiene la ejecución si el usuario no tiene el rol requerido.
*/