Files
D1041231027-WebGIS/03/api/middleware.php
T
2026-06-10 18:54:25 +07:00

60 lines
1.9 KiB
PHP

<?php
// api/middleware.php
// Memulai session jika belum dimulai
if (session_status() === PHP_SESSION_NONE) {
// Pastikan session cookie aman dan hanya terakses lewat HTTP (mencegah XSS hijack)
ini_set('session.cookie_httponly', 1);
session_start();
}
/**
* Middleware untuk memvalidasi user yang login dan mencocokkan perannya (RBAC).
* Jika user belum login, akan mengembalikan 401 Unauthorized.
* Jika role user tidak ada dalam daftar role yang diizinkan, mengembalikan 403 Forbidden.
*
* @param array $allowedRoles Daftar role yang diizinkan (contoh: ['admin', 'petugas'])
* @return array Data user yang saat ini sedang login dari Session
*/
function requireAuth(array $allowedRoles = []): array
{
// Cek apakah ada data user di Session
if (!isset($_SESSION['user']) || !is_array($_SESSION['user'])) {
http_response_code(401);
echo json_encode([
'success' => false,
'message' => 'Unauthorized: Silakan login terlebih dahulu untuk mengakses fitur ini.'
]);
exit;
}
$user = $_SESSION['user'];
// Cek kecocokan role (RBAC) jika list allowedRoles tidak kosong
if (!empty($allowedRoles) && !in_array($user['role'], $allowedRoles)) {
http_response_code(403);
echo json_encode([
'success' => false,
'message' => 'Forbidden: Peran Anda (' . $user['role'] . ') tidak memiliki hak akses ke fitur ini.'
]);
exit;
}
return $user;
}
/**
* Middleware Opsional untuk mendukung Guest Mode.
* Jika user login, akan mengembalikan data user.
* Jika belum login, akan mengembalikan null (sebagai Guest) dan proses tetap berlanjut.
*
* @return array|null Data user jika login, atau null jika guest
*/
function optionalAuth(): ?array
{
if (isset($_SESSION['user']) && is_array($_SESSION['user'])) {
return $_SESSION['user'];
}
return null;
}