Reviewed-on: https://git.eckertplayground.de/taarly/PHP_AdminTool_Projekt/pulls/24 Co-authored-by: blaerf <blaerf@gmx.de> Co-committed-by: blaerf <blaerf@gmx.de>
104 lines
3.5 KiB
PHP
104 lines
3.5 KiB
PHP
<?php
|
|
|
|
// Strenge Typprüfung für Parameter- und Rückgabetypen aktivieren.
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Services\Ldap\LdapDirectoryService;
|
|
use App\Services\Logging\LoggingService;
|
|
|
|
/**
|
|
* Controller für die Benutzer- und Gruppenanzeige.
|
|
*
|
|
* Aufgaben:
|
|
* - holt über den LdapDirectoryService die Listen von Benutzern und Gruppen
|
|
* - behandelt technische Fehler und bereitet eine Fehlermeldung für die View auf
|
|
* - gibt die Daten an eine View-Datei (public/views/users.php) weiter
|
|
*
|
|
* WICHTIG:
|
|
* - Es werden aktuell nur Daten angezeigt (Read-only).
|
|
* - Es findet keine Änderung im Active Directory statt.
|
|
*
|
|
* NEU:
|
|
* - Gibt ein View-Result-Array zurück, das von index.php + Layout gerendert wird.
|
|
*/
|
|
class UserManagementController
|
|
{
|
|
/** @var array<string, mixed> Vollständige Anwendungskonfiguration (aus config.php) */
|
|
private array $config;
|
|
|
|
/** @var LdapDirectoryService Service für das Lesen von Benutzern und Gruppen aus dem LDAP/AD */
|
|
private LdapDirectoryService $directoryService;
|
|
|
|
/** @var LoggingService Logger für technische Fehler */
|
|
private LoggingService $logger;
|
|
|
|
/**
|
|
* @param array<string, mixed> $config Vollständige Konfiguration aus config.php
|
|
*/
|
|
public function __construct(array $config)
|
|
{
|
|
// Komplette Konfiguration speichern (falls später weitere Werte benötigt werden).
|
|
$this->config = $config;
|
|
|
|
// LDAP-Konfiguration aus der Gesamt-Konfiguration herausziehen.
|
|
$ldapConfig = $config['ldap'] ?? [];
|
|
|
|
// Directory-Service initialisieren, der die eigentliche LDAP-Arbeit übernimmt.
|
|
$this->directoryService = new LdapDirectoryService($ldapConfig);
|
|
|
|
// Logging-Service initialisieren.
|
|
$this->logger = new LoggingService($config['logging'] ?? []);
|
|
}
|
|
|
|
/**
|
|
* Zeigt Benutzer- und Gruppenliste an.
|
|
* Wird typischerweise über die Route "users" (index.php?route=users) aufgerufen.
|
|
*
|
|
* @return array<string, mixed> View-Result für das zentrale Layout
|
|
*/
|
|
public function show(): array
|
|
{
|
|
// Standardwerte für die View-Variablen vorbereiten.
|
|
$error = null;
|
|
$users = [];
|
|
$groups = [];
|
|
|
|
try {
|
|
// Benutzer- und Gruppenlisten aus dem AD laden.
|
|
$users = $this->directoryService->getUsers();
|
|
$groups = $this->directoryService->getGroups();
|
|
} catch (\Throwable $exception) {
|
|
// Technische Details ins Log, für den Benutzer eine allgemeine Meldung.
|
|
$this->logger->logException(
|
|
'Fehler beim Laden von Benutzern/Gruppen.',
|
|
$exception,
|
|
[
|
|
'route' => 'users',
|
|
'remote_addr' => $_SERVER['REMOTE_ADDR'] ?? null,
|
|
]
|
|
);
|
|
|
|
$error = 'Fehler beim Laden von Benutzern/Gruppen. '
|
|
. 'Bitte versuchen Sie es später erneut oder wenden Sie sich an den Administrator.';
|
|
}
|
|
|
|
// Pfad zur eigentlichen View-Datei bestimmen.
|
|
$viewPath = __DIR__ . '/../../public/views/users.php';
|
|
|
|
return [
|
|
'view' => $viewPath,
|
|
'data' => [
|
|
// Die View erwartet aktuell $users, $groups, $error.
|
|
'users' => $users,
|
|
'groups' => $groups,
|
|
'error' => $error,
|
|
'loginPage' => false,
|
|
],
|
|
'pageTitle' => 'Benutzer & Gruppen',
|
|
'activeMenu' => 'users',
|
|
];
|
|
}
|
|
}
|