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:
+37
-12
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user