Me gustaría saber:
1 - ¿Cómo crear dos middlewares diferentes (para ADMIN
y STAFF
) a partir de variables SESSION
para usarlos más tarde para evitar que los usuarios que no son ADMIN ni STAFF accedan a las páginas que no quiero que tengan acceso?
Esto es lo que hice, pero estoy completamente inseguro y atascado:
ACCESO DE PROCESAMIENTO DE FUNCIONES PARA MIEMBROS ADMIN
:
function checkAdmin() { $_SESSION['hlbank_admin_user'] = array('name' => 'Admin'); // if the session id is not set, redirect to login page if (!isset($_SESSION['hlbank_admin_user'])) { header('Location: ' . WEB_ROOT . 'admin/login.php'); exit; } // the user want to logout if (isset($_GET['logout'])) { doLogout(); } }
ACCESO A TRAMITACIÓN DE FUNCIONES PARA MIEMBROS DEL STAFF
:
function checkStaff() { // if the session id is not set, redirect to login page if(strlen($_SESSION['staff_id'])==0) { $host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $extra= WEB_ROOT . "admin/pages_staff_index.php"; $_SESSION["staff_id"]=""; header("Location: http://$host$uri/$extra"); } // the user want to logout if (isset($_GET['logout'])) { doLogout(); } }
Entonces, ayúdenme a corregir mis dos funciones anteriores que tienen como objetivo verificar a través de LA SESSION
si el Usuario conectado es un ADMIN
y un STAFF
.
¿Cómo usar ambas funciones al mismo tiempo en una página para verificar si el usuario es ADMIN o STAFF y así bloquear el acceso a los usuarios que no son ADMIN
ni STAFF
?
Gracias por favor ayúdame.
Hay muchas maneras de implementar esto, pero aquí hay una. Simplificaría las funciones para que cada una devuelva un valor booleano. Mueva toda la lógica de redireccionamiento, cosas de cierre de sesión en el código de llamada.
No estoy seguro del nombre de las claves de sesión que usa, así que solo usé hlbank_admin_user
y staff_id
. También asumí que si están configurados, entonces el usuario es ese rol.
Cambié el nombre de las funciones a isAdmin
y isStaff
.
function isAdmin(): bool { return isset($_SESSION['hlbank_admin_user']); } function isStaff(): bool { return isset($_SESSION['staff_id']); }
Luego, en su código de llamada, puede verificar cualquiera de los dos.
if (!isAdmin() && !isStaff()) { // Not authorized >> redirect }
Yendo un paso más allá, puede crear una sola función para verificar si son administradores o empleados.
function isPrivileged(): bool { return isAdmin() || isStaff(); }
Luego, en su código de llamada, puede verificar eso.
if (!isPrivileged()) { // Not authorized >> redirect }
Gracias por su respuesta. Pero estoy confundido por tu respuesta. En realidad, lo que no entiendo es por qué no declaraste primero las variables de sesión $_SESSION['hlbank_admin_user'] y $_SESSION['staff_id'] devueltas en las funciones isAdmin() e isStaff() porque las acabas de devolver con isset en cada una de esas dos funciones???
Pero porque devolverlos sabiendo que aun no han declarado???
Solo para aclarar cualquier confusión, la forma en que esto funciona normalmente es durante el inicio de sesión, configura algunas variables de sesión que desea rastrear en futuras solicitudes. No necesita volver a declararlos en absoluto en el futuro. Simplemente puede comprobarlos o leerlos.
Pseudocódigo para iniciar sesión,
session_start() if (username & password = true) { // These sessions values will persist for the entire session. // Just make sure to call `session_start()` on every page before trying to access them $_SESSION['isLoggedIn'] = true; $_SESSION['role'] = admin; }
Luego, cuando intentan acceder a una página restringida, simplemente verifica si están conectados y si tienen un rol específico.
Pseudocódigo para comprobar el acceso,
session_start() $loggedIn = $_SESSION['isLoggedIn'] ?? false; $role = $_SESSION['role'] ?? ''; if ($isLoggedIn === true && $role === 'admin') { // You are logged in and an admin }
Gracias por su respuesta. Pero estoy confundido por tu respuesta. En realidad, lo que no entiendo es por qué no declaraste primero las variables de sesión $_SESSION['hlbank_admin_user']
y $_SESSION['staff_id']
devueltas en las funciones isAdmin()
e isStaff()
porque las acabas de devolver con isset
en cada una de esas dos funciones???
Pero porque devolverlos sabiendo que aun no han declarado???