Users - Benutzerverwaltung | Keywords: Backend, Rechte, Rollen, Authentifizierung, Berechtigungen, Sitzungen, Sessions, Admin
Übersicht: Verwaltet Backend-Benutzer mit rollenbasiertem Rechtesystem. Ermöglicht Authentifizierung, Sitzungsverwaltung und komplexe Berechtigungen für sichere Zugriffskontrolle im REDAXO-Backend.
Kern-Klassen
| Klasse |
Beschreibung |
rex_user |
Zentrale Benutzer-Klasse mit Methoden für Authentifizierung und Rechteverwaltung |
rex_backend_login |
Backend-Login-System mit Session-Management |
rex_user_session |
Session-Verwaltung für Benutzer |
rex_user_role |
Rollenbasierte Rechteverwaltung |
rex_clang_perm |
Sprachchenrechte für Benutzer |
rex_user-Methoden
| Methode |
Rückgabe |
Beschreibung |
getId() |
int |
ID des Benutzers |
getLogin() |
string |
Login-Name |
getName() |
string |
Vollständiger Name |
getEmail() |
string |
E-Mail-Adresse |
isAdmin() |
bool |
Admin-Status prüfen |
hasRole() |
bool |
Rolle zugewiesen? |
hasPerm($perm) |
bool |
Berechtigung prüfen |
getComplexPerm($key) |
rex_complex_perm |
Komplexe Berechtigung abrufen |
getValue($key) |
mixed |
Benutzerwert abrufen |
setValue($key, $value) |
self |
Benutzerwert setzen |
save() |
bool |
Speichert Änderungen |
rex_backend_login-Methoden
| Methode |
Rückgabe |
Beschreibung |
hasSession() |
bool |
Aktive Session vorhanden? |
createUser() |
?rex_user |
User-Objekt aus Session erstellen |
checkLogin() |
bool |
Login-Daten prüfen |
setUser(rex_user $user) |
void |
Benutzer für Session setzen |
Standard-Berechtigungen
| Permission |
Beschreibung |
admin / admin[] |
Administrator-Rechte |
users[] |
Benutzerverwaltung |
general|settings[] |
Systemeinstellungen |
general|update[] |
System-Updates |
media[] |
Medienverwaltung |
structure[] |
Strukturverwaltung |
modules[] |
Modulverwaltung |
templates[] |
Templateverwaltung |
clang[...] |
Sprachrechte |
Praxisbeispiele
Beispiel 1: Aktuellen Benutzer abrufen
$user = rex::getUser();
if ($user) {
echo 'Eingeloggt als: ' . $user->getLogin();
echo '<br>Name: ' . $user->getName();
echo '<br>E-Mail: ' . $user->getEmail();
}
Beispiel 2: Admin-Status prüfen
$user = rex::getUser();
if ($user && $user->isAdmin()) {
echo 'Administrator-Rechte vorhanden';
// Zeige erweiterte Optionen
}
Beispiel 3: Berechtigung prüfen
$user = rex::getUser();
if ($user && $user->hasPerm('structure[]')) {
echo 'Darf Struktur bearbeiten';
} else {
echo 'Keine Struktur-Rechte';
}
Beispiel 4: Mehrere Berechtigungen prüfen
$user = rex::getUser();
if ($user) {
if ($user->hasPerm('media[]') && $user->hasPerm('structure[]')) {
echo 'Hat Medien- und Struktur-Rechte';
}
}
Beispiel 5: Komplexe Sprachrechte prüfen
$user = rex::getUser();
$clangId = rex_clang::getCurrentId();
if ($user && $user->getComplexPerm('clang')->hasPerm($clangId)) {
echo 'Darf diese Sprache bearbeiten';
}
Beispiel 6: Backend-Login prüfen
// In Templates: Offline-Artikel für Admins anzeigen
if (rex_backend_login::hasSession()) {
echo 'Backend-User ist eingeloggt';
// Zeige Offline-Artikel
}
Beispiel 7: Alle Benutzer abrufen
$sql = rex_sql::factory();
$users = $sql->getArray('SELECT * FROM ' . rex::getTable('user') . ' WHERE status = 1 ORDER BY login');
foreach ($users as $userData) {
$user = rex_user::fromSql($userData);
echo $user->getLogin() . ' - ' . $user->getName() . '<br>';
}
Beispiel 8: Benutzer erstellen
$user = rex_user::create();
$user->setLogin('johndoe');
$user->setName('John Doe');
$user->setEmail('john@example.com');
$user->setValue('status', 1);
// Passwort setzen (wird automatisch gehasht)
$user->setValue('password', rex_login::passwordHash('geheim123'));
if ($user->save()) {
echo 'Benutzer erstellt';
}
Beispiel 9: Rolle zuweisen
$user = rex_user::get($userId);
if ($user) {
$user->setValue('role', 'editor'); // Name der Rolle
$user->save();
}
$user = rex::getUser();
if ($user) {
$user->setValue('description', 'Hauptredakteur');
$user->setValue('lastlogin', date('Y-m-d H:i:s'));
$user->save();
}
Beispiel 11: Session-Validierung
use rex_backend_login;
// Prüfen ob Backend-User eingeloggt
if (!rex_backend_login::hasSession()) {
// Redirect zum Login
header('Location: ' . rex_url::backendPage('login'));
exit;
}
Beispiel 12: Addon-spezifische Rechte
$user = rex::getUser();
// Addon-Berechtigung prüfen
if ($user && $user->hasPerm('yform[manager]')) {
echo 'Darf YForm Manager nutzen';
}
// Komplexe YForm-Tabellen-Rechte
if ($user && $user->getComplexPerm('yform_manager_table_view')->hasPerm('rex_my_table')) {
echo 'Darf diese YForm-Tabelle sehen';
}
Beispiel 13: User-Objekt im Frontend erstellen
// Für spezielle Fälle (z.B. Fehlermeldungen für Admins)
$user = rex_backend_login::createUser();
if ($user && $user->isAdmin()) {
// Detaillierte Fehlermeldung für Admin
echo rex_error_handler::getFullErrorMessage($exception);
}
Beispiel 14: Benutzer nach ID laden
$userId = 5;
$user = rex_user::get($userId);
if ($user) {
echo $user->getLogin();
} else {
echo 'Benutzer nicht gefunden';
}
Beispiel 15: Benutzer löschen
$user = rex_user::get($userId);
if ($user && !$user->isAdmin()) {
if ($user->delete()) {
echo 'Benutzer gelöscht';
}
}
Beispiel 16: Passwort ändern
$user = rex_user::get($userId);
if ($user) {
$newPassword = 'neuespasswort123';
$user->setValue('password', rex_login::passwordHash($newPassword));
$user->save();
}
Beispiel 17: Eigenes Profil bearbeiten
$user = rex::getUser();
if ($user) {
$user->setName(rex_post('name', 'string'));
$user->setEmail(rex_post('email', 'string'));
if ($user->save()) {
echo rex_view::success('Profil aktualisiert');
}
}
Beispiel 18: Benutzer-Status prüfen
$user = rex_user::get($userId);
if ($user && 1 == $user->getValue('status')) {
echo 'Benutzer ist aktiv';
} else {
echo 'Benutzer ist inaktiv';
}
Beispiel 19: Alle Admins abrufen
$sql = rex_sql::factory();
$sql->setQuery('SELECT * FROM ' . rex::getTable('user') . ' WHERE admin = 1');
while ($sql->hasNext()) {
$user = rex_user::fromSql($sql);
echo $user->getLogin() . ' (Admin)<br>';
$sql->next();
}
Beispiel 20: Benutzer nach Login finden
$login = 'johndoe';
$sql = rex_sql::factory();
$sql->setQuery('SELECT * FROM ' . rex::getTable('user') . ' WHERE login = ?', [$login]);
if ($sql->getRows() > 0) {
$user = rex_user::fromSql($sql->getArray()[0]);
echo $user->getName();
}
Beispiel 21: Sprach-Berechtigungen setzen
$user = rex_user::get($userId);
if ($user) {
// Zugriff auf Sprachen 1 und 2
$user->setValue('clang', '1|2');
$user->save();
}
Beispiel 22: Startseite für Rolle festlegen
$user = rex_user::get($userId);
if ($user) {
$user->setValue('startpage', 'yform/manager');
$user->save();
}
Beispiel 23: Benutzer-Suchfunktion
$searchTerm = rex_request('search', 'string');
$sql = rex_sql::factory();
$query = 'SELECT * FROM ' . rex::getTable('user') . '
WHERE login LIKE ? OR name LIKE ? OR email LIKE ?';
$params = array_fill(0, 3, '%' . $searchTerm . '%');
$users = $sql->getArray($query, $params);
foreach ($users as $userData) {
$user = rex_user::fromSql($userData);
echo $user->getLogin() . ' - ' . $user->getName() . '<br>';
}
Beispiel 24: Backend-Seite mit Rechtsprüfung
// In pages/index.php
$user = rex::requireUser();
if (!$user->hasPerm('media[]') && !$user->isAdmin()) {
echo rex_view::error('Keine Berechtigung');
return;
}
// Inhalt der Seite
echo 'Geschützter Bereich';
Beispiel 25: Multi-Faktor-Authentifizierung prüfen
$user = rex::getUser();
if ($user) {
$twoFactorEnabled = (bool) $user->getValue('two_factor_auth');
if (!$twoFactorEnabled) {
echo rex_view::warning('2FA nicht aktiviert');
}
}
Beispiel 26: Benutzer nach Rolle filtern
$roleName = 'editor';
$sql = rex_sql::factory();
$users = $sql->getArray('SELECT * FROM ' . rex::getTable('user') . ' WHERE role = ?', [$roleName]);
echo count($users) . ' Benutzer mit Rolle "' . $roleName . '"';
Beispiel 27: Letzten Login speichern
// In boot.php oder Login-Extension
rex_extension::register('LOGIN_SUCCESS', function(rex_extension_point $ep) {
$user = $ep->getSubject();
if ($user instanceof rex_user) {
$user->setValue('lastlogin', date('Y-m-d H:i:s'));
$user->save();
}
});
Beispiel 28: Benutzer deaktivieren
$user = rex_user::get($userId);
if ($user && !$user->isAdmin()) {
$user->setValue('status', 0);
if ($user->save()) {
echo 'Benutzer deaktiviert';
}
}
Beispiel 29: Custom Permission Check
$user = rex::getUser();
// Eigene Berechtigung registrieren
if ($user && $user->hasPerm('myaddon[edit]')) {
echo 'Darf Addon bearbeiten';
}
Beispiel 30: Benutzer-Statistik
$sql = rex_sql::factory();
// Anzahl aktiver Benutzer
$activeUsers = $sql->getArray('SELECT COUNT(*) as count FROM ' . rex::getTable('user') . ' WHERE status = 1')[0]['count'];
// Anzahl Admins
$admins = $sql->getArray('SELECT COUNT(*) as count FROM ' . rex::getTable('user') . ' WHERE admin = 1')[0]['count'];
echo 'Aktive Benutzer: ' . $activeUsers . '<br>';
echo 'Administratoren: ' . $admins;
Integration: Kern-System, Session-Management, Extension Points (LOGIN_SUCCESS, USER_IMPERSONATE), Backend-Controller, Addon-spezifische Rechteverwaltung (z.B. YForm), YCom (Frontend-Benutzer)