prepare('SELECT COUNT(*) FROM roles WHERE LOWER(name) = LOWER(?) AND id <> ?'); $dup->execute([$name, $id]); if ($dup->fetchColumn() > 0) $errors[] = 'Eine Rolle mit diesem Namen existiert bereits.'; if (!$errors) { $perms = []; // Wer kein echter Administrator ist, kann keine Rechte vergeben, die er selbst nicht hat (sonst könnte sich ein Co-Admin zum Administrator hochstufen) $oldPerms = []; if ($action === 'update') { $op = $pdo->prepare('SELECT permissions FROM roles WHERE id = ?'); $op->execute([$id]); $oldPerms = json_decode((string) $op->fetchColumn(), true) ?: []; } foreach (array_keys($permLabels) as $p) { $want = !empty($_POST['perm_' . $p]); if ($staff['role'] !== 'admin' && $want && !has_permission($staff, $p)) $want = !empty($oldPerms[$p]); $perms[$p] = $want; } $json = json_encode($perms); if ($action === 'create') { $pdo->prepare('INSERT INTO roles (name, permissions, is_active, notes, created_at, updated_at) VALUES (?,?,?,?,?,?)') ->execute([$name, $json, $isActive, $notes ?: null, db_now(), db_now()]); audit_log($staff['id'], "Rolle erstellt: {$name}"); flash('success', 'Rolle erstellt.'); } else { $pdo->prepare('UPDATE roles SET name=?, permissions=?, is_active=?, notes=?, updated_at=? WHERE id=?') ->execute([$name, $json, $isActive, $notes ?: null, db_now(), $id]); audit_log($staff['id'], "Rolle aktualisiert: {$name}"); flash('success', 'Änderungen gespeichert.'); } redirect('/staff/roles.php'); } } if ($action === 'seed_defaults') { if ($staff['role'] !== 'admin') { flash('error', 'Vordefinierte Rollen anlegen dürfen nur Administratoren.'); } else { $made = permission_seed_default_roles($pdo); if ($made) { audit_log($staff['id'], 'Vordefinierte Rollen angelegt: ' . implode(', ', $made)); flash('success', count($made) . ' Rolle(n) angelegt: ' . implode(', ', $made) . '.'); } else flash('info', 'Alle vordefinierten Rollen sind schon vorhanden.'); } redirect('/staff/roles.php'); } if ($action === 'delete') { $id = (int) $_POST['id']; // Mitarbeiter und Abteilungszugriffe auf die Hauptrolle zurücksetzen $pdo->prepare('UPDATE staff SET role_id = NULL WHERE role_id = ?')->execute([$id]); $pdo->prepare('UPDATE staff_department SET role_id = NULL WHERE role_id = ?')->execute([$id]); $pdo->prepare('DELETE FROM roles WHERE id = ?')->execute([$id]); audit_log($staff['id'], "Rolle gelöscht: #{$id}"); flash('success', 'Rolle gelöscht.'); redirect('/staff/roles.php'); } } $isNew = isset($_GET['new']); $editId = (int) ($_GET['edit'] ?? 0); $showForm = $isNew || $editId || ($errors && in_array($_POST['action'] ?? '', ['create', 'update'], true)); $presetNames = []; foreach (permission_presets() as [$__pn, , , $__seed]) if ($__seed) $presetNames[] = mb_strtolower($__pn); $roles = $pdo->query( 'SELECT r.*, (SELECT COUNT(*) FROM staff s WHERE s.role_id = r.id) + (SELECT COUNT(*) FROM staff_department sd WHERE sd.role_id = r.id) AS staff_count FROM roles r ORDER BY r.name' )->fetchAll(); $editRole = null; $editPerms = $agentDefaults; // neue Rolle: wie ein Standard-Mitarbeiter; fehlende Rechte älterer Rollen gelten mit dem Standardwert if ($editId) { $es = $pdo->prepare('SELECT * FROM roles WHERE id = ?'); $es->execute([$editId]); $editRole = $es->fetch() ?: null; if ($editRole) $editPerms = permission_effective(json_decode($editRole['permissions'] ?? '{}', true) ?? []); } if ($_POST && $errors) foreach (array_keys($permLabels) as $p) $editPerms[$p] = !empty($_POST['perm_' . $p]); $pageTitle = 'Rollen'; $activePage = 'roles'; require __DIR__ . '/_header.php'; ?>
$_POST[$k] ?? $default; $v = fn(string $k, string $col, $default = '') => $f($k, $editRole[$col] ?? $default); $curActive = $_POST ? (($_POST['status'] ?? 'active') === 'active') : (bool) ($editRole['is_active'] ?? 1); ?>

—

'Rolle', 'perms' => 'Berechtigungen']); ?>

Rolleninformationen

Eine deaktivierte Rolle wird ignoriert; betroffene Mitarbeiter haben dann die Standard-Mitarbeiterrechte.

Administratornotizen – Interne Notizen, sichtbar für alle Administratoren

Abbrechen

Rollen

Neue Rolle hinzufügen

Berechtigungssets für Mitarbeiter. Ohne Rolle gelten die Standard-Mitarbeiterrechte.

Rollen mit dem Kennzeichen „vordefiniert“ (Co-Administrator, Support-Manager, IT / Technik, Teamleitung, Support 1st und 2nd Level, Redaktion, Auswertung, Teamverwaltung, Aushilfe, Nur lesen) wurden mit dem Update angelegt und lassen sich wie jede andere Rolle ändern oder löschen.

vordefinierte Rolle(n) fehlen
Rechte-Übersicht: Wer darf was?

Standard = Mitarbeiter ohne eigene Rolle. Administratoren dürfen immer alles. Eine deaktivierte Rolle zählt wie Standard.

$item): ?>
RechtStandard
RollennameStatusRechteZugewiesenErstelltZuletzt aktualisiert
vordefiniert / Bearbeiten ·
Noch keine benutzerdefinierten Rollen angelegt.