auto build admin user when install_db.php and better auth service bzw admin control

This commit is contained in:
Bruno Eckhardt committed 2026-05-26 10:25:17 +02:00
1 parent 40b602a79a
commit 964a3e44fc
5 files changed
+76 -22

No files matched your search

+13 -1
View File
@@ -35,10 +35,22 @@ try {
ob_start();
// Load navigation from config
$navItems = require __DIR__ . '/src/config/navigation.php';
$routes = [];
// Helper access to router's internal state for navigation display
// Note: In a real refactor, we would add a getRoutes() method to the Router class.
// For now, we'll re-parse or assume the check is needed.
?>
<nav>
<?php foreach ($navItems as $navKey => $item):
if ($item['auth'] && !isset($_SESSION['user_logged_in'])) continue;
$isLoggedIn = isset($_SESSION['user_logged_in']);
$isAdmin = isset($_SESSION['is_admin']) && $_SESSION['is_admin'] === true;
// Check auth requirement
if ($item['auth'] && !$isLoggedIn) continue;
// Special check for admin services based on service name prefix
// or we could look up the route's middleware
if (strpos($navKey, 'admin_') === 0 && !$isAdmin) continue;
?>
<a href="?service=<?= $navKey ?>" class="<?= $service === $navKey ? 'active' : '' ?>"><?= $item['label'] ?></a>
<?php endforeach; ?>
@@ -3,6 +3,7 @@
namespace MVC\Controller;
use MVC\Core\Controller;
use MVC\Model\Users;
class AuthController extends Controller {
public function login() {
@@ -15,15 +16,14 @@ class AuthController extends Controller {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
// Hardcoded logins
$users = [
'admin' => 'password123',
'user' => 'user123'
];
$user = Users::getByUsername($username);
if (isset($users[$username]) && $users[$username] === $password) {
if ($user && password_verify($password, $user['PASSWORD'])) {
$_SESSION['user_logged_in'] = true;
$_SESSION['username'] = $username;
$_SESSION['username'] = $user['USERNAME'];
$_SESSION['role'] = $user['ROLE'];
$_SESSION['is_admin'] = ($user['ROLE'] === 'admin');
header('Location: ?service=home');
exit;
} else {
@@ -39,4 +39,4 @@ class AuthController extends Controller {
header('Location: ?service=login');
exit;
}
}
}
+2 -3
View File
@@ -12,6 +12,5 @@ $router->add('test1', \MVC\Controller\TestController::class, 'service1', ['auth'
$router->add('test2', \MVC\Controller\TestController::class, 'service2', ['auth']);
$router->add('login', \MVC\Controller\AuthController::class, 'login');
$router->add('logout', \MVC\Controller\AuthController::class, 'logout');
$router->add('admin_mail', \MVC\Controller\AdminController::class, 'mail_service', ['auth']);
$router->add('admin_users', \MVC\Controller\AdminController::class, 'user_service', ['auth']);
$router->add('datenbank', \MVC\Controller\DatenbankController::class, 'datenbank');
$router->add('admin_mail', \MVC\Controller\AdminController::class, 'mail_service', ['auth', 'admin']);
$router->add('admin_users', \MVC\Controller\AdminController::class, 'user_service', ['auth', 'admin']);
+19
View File
@@ -125,4 +125,23 @@ foreach ($tables as $tableName => $info) {
}
}
// 3. Test-User anlegen
echo "👤 Erstelle Test-User...\n";
require_once __DIR__ . '/WEBROOT/src/MVC/Model/Users.php';
try {
if (!\MVC\Model\Users::getByUsername('admin')) {
\MVC\Model\Users::insert([
'USERNAME' => 'admin',
'PASSWORD' => password_hash('admin123', PASSWORD_DEFAULT),
'EMAIL' => 'admin@example.com',
'ROLE' => 'admin'
]);
echo "✅ Test-User 'admin' mit Passwort 'admin123' erstellt.\n";
} else {
echo "ℹ️ Test-User 'admin' existiert bereits.\n";
}
} catch (Exception $e) {
echo "❌ Fehler beim Erstellen des Test-Users: " . $e->getMessage() . "\n";
}
echo "\n✨ Installation abgeschlossen.\n";
+34 -10
View File
@@ -1071,6 +1071,7 @@ $files['WEBROOT/src/MVC/Controller/AuthController.php'] = <<<'PHP'
namespace MVC\Controller;
use MVC\Core\Controller;
use MVC\Model\Users;
class AuthController extends Controller {
public function login() {
@@ -1083,15 +1084,14 @@ class AuthController extends Controller {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
// Hardcoded logins
$users = [
'admin' => 'password123',
'user' => 'user123'
];
$user = Users::getByUsername($username);
if (isset($users[$username]) && $users[$username] === $password) {
if ($user && password_verify($password, $user['PASSWORD'])) {
$_SESSION['user_logged_in'] = true;
$_SESSION['username'] = $username;
$_SESSION['username'] = $user['USERNAME'];
$_SESSION['role'] = $user['ROLE'];
$_SESSION['is_admin'] = ($user['ROLE'] === 'admin');
header('Location: ?service=home');
exit;
} else {
@@ -1369,8 +1369,8 @@ $router->add('test1', \MVC\Controller\TestController::class, 'service1', ['auth'
$router->add('test2', \MVC\Controller\TestController::class, 'service2', ['auth']);
$router->add('login', \MVC\Controller\AuthController::class, 'login');
$router->add('logout', \MVC\Controller\AuthController::class, 'logout');
$router->add('admin_mail', \MVC\Controller\AdminController::class, 'mail_service', ['auth']);
$router->add('admin_users', \MVC\Controller\AdminController::class, 'user_service', ['auth']);
$router->add('admin_mail', \MVC\Controller\AdminController::class, 'mail_service', ['auth', 'admin']);
$router->add('admin_users', \MVC\Controller\AdminController::class, 'user_service', ['auth', 'admin']);
PHP;
// --- CONFIG: navigation.php ---
@@ -1424,7 +1424,11 @@ try {
?>
<nav>
<?php foreach ($navItems as $navKey => $item):
if ($item['auth'] && !isset($_SESSION['user_logged_in'])) continue;
$isLoggedIn = isset($_SESSION['user_logged_in']);
$isAdmin = isset($_SESSION['is_admin']) && $_SESSION['is_admin'] === true;
if ($item['auth'] && !$isLoggedIn) continue;
if (strpos($navKey, 'admin_') === 0 && !$isAdmin) continue;
?>
<a href="?service=<?= $navKey ?>" class="<?= $service === $navKey ? 'active' : '' ?>"><?= $item['label'] ?></a>
<?php endforeach; ?>
@@ -1829,6 +1833,26 @@ foreach ($tables as $name => $info) {
}
} catch (Exception $e) { echo "❌: " . $e->getMessage() . "\n"; }
}
// 3. Test-User anlegen
echo "👤 Erstelle Test-User...\n";
require_once __DIR__ . '/WEBROOT/src/MVC/Model/Users.php';
try {
if (!\MVC\Model\Users::getByUsername('admin')) {
\MVC\Model\Users::insert([
'USERNAME' => 'admin',
'PASSWORD' => password_hash('admin123', PASSWORD_DEFAULT),
'EMAIL' => 'admin@example.com',
'ROLE' => 'admin'
]);
echo "✅ Test-User 'admin' mit Passwort 'admin123' erstellt.\n";
} else {
echo "ℹ️ Test-User 'admin' existiert bereits.\n";
}
} catch (Exception $e) {
echo "❌ Fehler beim Erstellen des Test-Users: " . $e->getMessage() . "\n";
}
echo "\n✨ Installation abgeschlossen.\n";
PHP;