projectbased/app/Lib/Auth.php

SHA-256: 3ef59e6d95f13e4c96c0ecd24a26df91450fee2d277a8e87b7d8f5bb87481d3a
<?php
namespace App\Lib;

use App\App;

final class Auth {
    public static function user(): ?array {
        $id = $_SESSION['uid'] ?? null;
        if (!$id) return null;
        $stmt = App::db()->prepare('SELECT id,email,display_name,is_admin,is_super_admin,r_index,created_at FROM users WHERE id=?');
        $stmt->execute([$id]);
        $u = $stmt->fetch();
        return $u ?: null;
    }

    public static function requireLogin(): array {
        $u = self::user();
        if (!$u) {
            header('Location: /?r=login');
            exit;
        }
        return $u;
    }

    public static function requireAdmin(): array {

        $u = self::requireLogin();
        if ((int)$u['is_admin'] !== 1) {
            http_response_code(403);
            echo "Forbidden";
            exit;
        }
        return $u;
    }

    public static function login(int $uid): void {
        $_SESSION['uid'] = $uid;
    }

    public static function logout(): void {
        unset($_SESSION['uid']);
    }


    public static function requireSuperAdmin(): array {
        $u = self::requireLogin();
        // Backwards compatible: if is_super_admin exists use it, else fall back to is_admin
        $isSuper = (int)($u['is_super_admin'] ?? 0);
        $isAdmin = (int)($u['is_admin'] ?? 0);
        if ($isSuper !== 1 && $isAdmin !== 1) {
            http_response_code(403);
            View::render('403', ['user'=>$u]);
            exit;
        }
        return $u;
    }
}