getMessage()); } return false; } /** * Logout the current user */ function logout() { ensureSession(); $_SESSION = array(); // Destroy session cookie if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time() - 3600, '/'); } session_destroy(); } /** * Require authentication - redirect to login if not authenticated * @param string $loginPage Path to login page (default: login.php) */ function requireAuth($loginPage = 'login.php') { if (!isLoggedIn()) { header('Location: ' . $loginPage); exit; } } /** * Get current username * @return string|null Username if logged in, null otherwise */ function getCurrentUsername() { ensureSession(); return isset($_SESSION['username']) ? $_SESSION['username'] : null; } /** * Get current fullname * @return string|null Username if logged in, null otherwise */ function getCurrentFullname() { ensureSession(); return isset($_SESSION['full_name']) ? $_SESSION['full_name'] : null; } /** * Get current user ID * @return int|null User ID if logged in, null otherwise */ function getCurrentUserId() { ensureSession(); return isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null; } /** * Get current user's group ID * @return int|null Group ID if logged in, null otherwise */ function getCurrentUserGroupId() { ensureSession(); return isset($_SESSION['group_id']) ? $_SESSION['group_id'] : null; } /** * Get current user's group name * @return string|null Group name if logged in, null otherwise */ function getCurrentUserGroupName() { ensureSession(); return isset($_SESSION['group_name']) ? $_SESSION['group_name'] : null; } /** * Check if current user is admin * @return bool True if user is in Admin group */ function isAdmin() { ensureSession(); return isset($_SESSION['group_name']) && $_SESSION['group_name'] === 'Admin'; } /** * Require admin privileges - redirect or show error * @param string $redirectPage Page to redirect to if not admin (default: index.php) */ function requireAdmin($redirectPage = 'index.php') { if (!isLoggedIn()) { header('Location: login.php'); exit; } if (!isAdmin()) { header('Location: ' . $redirectPage . '?error=access_denied'); exit; } } /** * Check if user has permission to view an item * @param string $itemType Type of item (map, dashboard, document, html_page) * @param int $itemId ID of the item * @return bool True if user has permission */ function canView($itemType, $itemId) { if (!isLoggedIn()) { return checkPermission(1, $itemType, $itemId, 'can_view'); } // Admins can view everything if (isAdmin()) { return true; } $groupId = getCurrentUserGroupId(); if (!$groupId) { return false; } try { return checkPermission($groupId, $itemType, $itemId, 'can_view') || checkPermission(1, $itemType, $itemId, 'can_view'); } catch (Exception $e) { error_log("Permission check error: " . $e->getMessage()); return false; } } /** * Check if user has permission to edit an item * @param string $itemType Type of item (map, dashboard, document, html_page) * @param int $itemId ID of the item * @return bool True if user has permission */ function canEdit($itemType, $itemId) { if (!isLoggedIn()) { return false; } // Admins can edit everything if (isAdmin()) { return true; } $groupId = getCurrentUserGroupId(); if (!$groupId) { return false; } try { return checkPermission($groupId, $itemType, $itemId, 'can_edit'); } catch (Exception $e) { error_log("Permission check error: " . $e->getMessage()); return false; } } /** * Check if user has permission to delete an item * @param string $itemType Type of item (map, dashboard, document, html_page) * @param int $itemId ID of the item * @return bool True if user has permission */ function canDelete($itemType, $itemId) { if (!isLoggedIn()) { return false; } // Admins can delete everything if (isAdmin()) { return true; } $groupId = getCurrentUserGroupId(); if (!$groupId) { return false; } try { return checkPermission($groupId, $itemType, $itemId, 'can_delete'); } catch (Exception $e) { error_log("Permission check error: " . $e->getMessage()); return false; } } /** * Get all items that the current user has permission to view * @param string $itemType Type of item * @param array $allItems Array of all items * @return array Filtered array of items user can view */ function filterItemsByPermission($itemType, $allItems) { // Admins can see everything if (isAdmin()) { return $allItems; } // Filter items based on permissions return array_filter($allItems, function($item) use ($itemType) { return canView($itemType, $item['id']); }); }