'Tickets beantworten', 'close_ticket' => 'Tickets schließen/lösen', 'delete_ticket' => 'Tickets löschen', 'transfer_ticket' => 'Tickets übertragen (Abteilung ändern)', 'post_note' => 'Interne Notizen schreiben', 'assign_ticket' => 'Tickets zuweisen (Mitarbeiter/Team)', 'manage_canned' => 'Textbausteine verwalten', 'view_reports' => 'Berichte einsehen', 'manage_kb' => 'Wissensdatenbank verwalten', 'create_ticket' => 'Tickets im Namen von Kunden erstellen', ]; // Feinkörnige Adminportal-Rechte ("Co-Admin") – siehe admin_section_permissions() in functions.php. // manage_kb steckt bewusst nur oben bei den Ticket-Rechten, nicht doppelt hier. $adminPermLabels = admin_section_permissions(); unset($adminPermLabels['manage_kb']); $permLabels = array_merge($ticketPermLabels, $adminPermLabels); $errors = []; if ($_SERVER['REQUEST_METHOD'] === 'POST') { verify_csrf(); $action = $_POST['action'] ?? ''; if ($action === 'create' || $action === 'update') { $id = (int) ($_POST['id'] ?? 0); $name = trim($_POST['name'] ?? ''); $isActive = ($_POST['status'] ?? 'active') === 'active' ? 1 : 0; $notes = trim($_POST['notes'] ?? ''); if ($name === '') $errors[] = 'Bitte einen Namen angeben.'; $dup = $pdo->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 = []; foreach (array_keys($permLabels) as $p) { $perms[$p] = !empty($_POST['perm_' . $p]); } $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 === '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)); $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 = array_fill_keys(array_keys($permLabels), false); if ($editId) { $es = $pdo->prepare('SELECT * FROM roles WHERE id = ?'); $es->execute([$editId]); $editRole = $es->fetch() ?: null; if ($editRole) $editPerms = array_merge($editPerms, 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

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

Standard-Mitarbeiterrechte (ohne eigene Rolle)
$label): ?>
RollennameStatusZugewiesenErstelltZuletzt aktualisiert
Bearbeiten ·
Noch keine benutzerdefinierten Rollen angelegt.