up
This commit is contained in:
+130
@@ -0,0 +1,130 @@
|
||||
<?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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user