Files
Adminator 37f6238d05 Auth Phase 2: Session-Zugriffe kanalisieren (verhaltensneutral)
Vorbereitung für den JWT+Redis-Umschalter: alle verstreuten
$_SESSION['teacher_id'|admin_id']-Zugriffe laufen jetzt durch Session::-Helper,
damit der Backend-Tausch später EINE Datei (Session.php) ist statt 18 Stellen.

- Session.php: neue Admin-Helper adminId()/loginAdmin()/logoutAdmin()/
  requireAdmin() (mirror der Teacher-Helper). teacherId()/adminId() starten
  die Session jetzt lazy (Aufrufer müssen Session::start() nicht mehr).
- 18 Fundstellen kanalisiert (admin.php, admin-accounts, admin-modules,
  licenses, levels, waypoints, foto-upload, admin_gate, save_map).
- Country.php + app.php cockpit_href: über Session:: mit class_exists-Fallback
  (Bootstrap/Lib-Kontext, Session evtl. nicht geladen).

Verhaltensneutral: 14/14 Lint OK, Helper-Round-Trip 6/6 PASS, Live-Smoke
(admin status/modules/accounts/licenses) weist unauth. Requests wie bisher
mit 401/403 ab. AUTH_BACKEND bleibt 'session' — Live unverändert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 16:33:14 +02:00

23 lines
768 B
PHP

<?php
/**
* Admin-Gate für Backend-Werkzeuge (Editoren, Uploads).
* Nur mit gültiger Super-Admin-Session erreichbar — sonst Redirect zur Admin-Login-Seite.
*
* Standalone einbindbar: lädt eigene Abhängigkeiten (BASE_PATH + Session), weil diese
* Werkzeuge z. T. als eigenständige .php ausgeliefert werden (nicht über den Front-Controller).
*
* Einbinden ganz am Anfang der zu schützenden Datei:
* require __DIR__ . '/…/php/lib/admin_gate.php';
*/
if (!defined('BASE_PATH')) {
require_once __DIR__ . '/../config/app.php';
}
if (!class_exists('Session')) {
require_once __DIR__ . '/Session.php';
}
if (!Session::adminId()) {
$base = defined('BASE_PATH') ? BASE_PATH : '';
header('Location: ' . $base . '/admin.html');
exit;
}