auto build admin user when install_db.php and better auth service bzw admin control
This commit is contained in:
1 parent
40b602a79a
commit
964a3e44fc
5 files changed
+76
-22
No files matched your search
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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']);
|
||||
@@ -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";
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in new issue
Block a user