Files
whatsapp/core/Auth.php
T
2026-04-16 22:23:33 -05:00

131 lines
4.0 KiB
PHP

<?php
/**
* core/Auth.php
* Gestión de sesión y autenticación de usuarios del panel.
* Extraído de config/config.php para separar responsabilidades.
*
* USO:
* require_once __DIR__ . '/../core/Auth.php';
* Auth::requireLogin(); // en cualquier vista protegida
* Auth::requireNotEnfermero(); // excluir enfermeros del panel admin
*/
class Auth
{
// ─── Verificación de sesión ─────────────────────────────────────────────
public static function isLoggedIn(): bool
{
return isset($_SESSION['admin_logged_in']) && $_SESSION['admin_logged_in'] === true;
}
public static function requireLogin(string $redirect = 'login.php'): void
{
if (!self::isLoggedIn()) {
header("Location: $redirect");
exit;
}
}
public static function requireNotEnfermero(string $redirect = 'enfermero_portal.php'): void
{
if (self::isEnfermero()) {
header("Location: $redirect");
exit;
}
}
// ─── Datos del usuario en sesión ────────────────────────────────────────
public static function id(): ?int
{
return isset($_SESSION['admin_user']['id'])
? (int) $_SESSION['admin_user']['id']
: null;
}
public static function role(): string
{
return $_SESSION['admin_user']['role'] ?? 'admin';
}
public static function fullName(): string
{
return $_SESSION['admin_user']['full_name']
?? $_SESSION['admin_user']['username']
?? 'Usuario';
}
public static function roleId(): ?int
{
$id = $_SESSION['admin_user']['role_id'] ?? null;
return $id ? (int) $id : null;
}
public static function isEnfermero(): bool
{
return self::role() === 'enfermero';
}
public static function isAdmin(): bool
{
return self::role() === 'admin';
}
public static function isSuperAdmin(): bool
{
return self::role() === 'superadmin';
}
// ─── Login / Logout ─────────────────────────────────────────────────────
/**
* Intenta autenticar usuario contra la BD.
* Devuelve array con datos del usuario o false si falla.
*/
public static function attempt(string $username, string $password): array|false
{
// Delegar en la función legacy de config.php mientras coexistan
// (authenticateUser está definida en config/config.php)
return authenticateUser($username, $password);
}
/**
* Establece la sesión tras un login exitoso.
*/
public static function login(array $userData): void
{
session_regenerate_id(true);
$_SESSION['admin_logged_in'] = true;
$_SESSION['admin_user'] = $userData;
$_SESSION['login_time'] = time();
}
public static function logout(): void
{
$_SESSION = [];
if (ini_get('session.use_cookies')) {
$p = session_get_cookie_params();
setcookie(
session_name(), '', time() - 42000,
$p['path'], $p['domain'], $p['secure'], $p['httponly']
);
}
session_destroy();
}
// ─── Tiempo de sesión ───────────────────────────────────────────────────
public static function isSessionExpired(): bool
{
if (!isset($_SESSION['login_time'])) return false;
$timeout = defined('SESSION_TIMEOUT') ? SESSION_TIMEOUT : 1800;
return (time() - $_SESSION['login_time']) > $timeout;
}
public static function refreshSession(): void
{
$_SESSION['login_time'] = time();
}
}