---
title: Auditprotokoll
description: Nachvollziehen, wer wann welche Änderung an Seiten, Benutzern und anderen Objekten vorgenommen hat.
navIcon: "🧾"
---

import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"
import { Icon } from "@/components/ui/icon"

Das Auditprotokoll zeichnet sicherheits- und änderungsrelevante Aktionen in CrispyCMS lückenlos auf — von der Anmeldung eines Benutzers über das Bearbeiten einer Seite bis hin zum Wiederherstellen eines Backups. Es beantwortet die Frage „Wer hat wann was geändert?" ohne zusätzliche Konfiguration.

<Alert variant="destructive">
<Icon name="alert-circle" />
<AlertTitle>Nur für Superuser sichtbar</AlertTitle>
<AlertDescription>
Der Menüpunkt **Verwaltung → Auditprotokoll** ist ausschließlich Benutzern mit der Superuser-Rolle zugänglich. Es gibt aktuell keine feingranulare Berechtigung, um Lesezugriff auf das Auditprotokoll gezielt an einzelne Rollen zu vergeben.
</AlertDescription>
</Alert>

---

## Was protokolliert wird

Jede protokollierte Aktion erhält einen eindeutigen Ereignis-Code. Die wichtigsten Kategorien:

| Bereich | Beispiele |
| :--- | :--- |
| **Benutzer** | Anmeldung, fehlgeschlagene Anmeldung, Abmeldung, Registrierung, Passwort-Reset, Profiländerung, Rollenänderung, Löschung |
| **Dateien** | Hochladen, Löschen, Verschieben, Umbenennen, Aktualisieren |
| **Seiten & Struktur** | Anlegen/Ändern/Löschen von Seiten, Kategorien, Rollen, Benutzern, Vorlagen, Layouts |
| **Weiterleitungen** | Anlegen, Ändern, Löschen einer Weiterleitung (siehe [Weiterleitungen](/benutzerhandbuch/redaktion/weiterleitungen)) |
| **Plugins** | Installation, Deinstallation, Löschung |
| **Einstellungen** | Änderungen an den Systemeinstellungen |
| **Backups** | Erstellen, Löschen, Wiederherstellen, Hochladen eines Backups |
| **System** | Bereinigung des Auditprotokolls selbst (siehe [Aufbewahrung](#aufbewahrung--automatische-bereinigung)) |

Für Erstellungen, Änderungen und Löschungen speichert CrispyCMS zusätzlich einen **Feld-Diff**: Bei Änderungen wird für jedes betroffene Feld der alte und der neue Wert festgehalten, bei Textfeldern zusätzlich als lesbarer Unified-Diff.

<Alert>
<Icon name="info" />
<AlertTitle>Nur tatsächliche Änderungen werden gespeichert</AlertTitle>
<AlertDescription>
Wird eine Seite gespeichert, ohne dass sich an den auditierten Feldern etwas geändert hat, entsteht kein neuer Auditprotokoll-Eintrag. So bleibt das Protokoll aussagekräftig und wächst nicht durch reine Leerlauf-Speicherungen.
</AlertDescription>
</Alert>

---

## Übersicht: Verwaltung → Auditprotokoll

Die Übersicht listet alle Einträge chronologisch (neueste zuerst) mit 50 Einträgen pro Seite.

| Spalte | Beschreibung |
| :--- | :--- |
| **#** | Interne, fortlaufende ID des Eintrags. |
| **Ereignis** | Name des Ereignis-Codes (z. B. `PAGE_UPDATE`), farblich markiert nach Art: rot für Löschungen, grün für Erstellungen, gelb für Aktualisierungen, blau für Benutzeraktionen. |
| **Objekt** | Der betroffene Objekttyp (Seite, Benutzer, Kategorie, Rolle, Vorlage, Layout, Plugin, …) samt ID, sofern zutreffend. |
| **Akteur** | Avatar und Name des Benutzers, der die Aktion ausgelöst hat. Bei systemseitig ausgelösten Aktionen (z. B. automatische Bereinigung) bleibt das Feld leer. |
| **Zeitstempel** | Datum und Uhrzeit der Aktion. |

### Filtern

Über die Filterleiste oberhalb der Tabelle können Sie die Liste eingrenzen:

* **Objekttyp** — z. B. nur Einträge zu Seiten oder nur zu Benutzern.
* **Ereignis** — ein konkreter Ereignis-Code aus der vollständigen Liste.

Mit **Filter zurücksetzen** oben rechts entfernen Sie alle aktiven Filter wieder.

### Details zu einem Eintrag

Zwei Symbole am Zeilenende öffnen weitere Details, sofern vorhanden:

| Symbol | Öffnet |
| :--- | :--- |
| **Änderungsvergleich** (Diff-Symbol) | Ein Dialog mit einer Tabelle aller geänderten Felder — jeweils mit Bezeichnung, altem und neuem Wert sowie, bei Textfeldern, einem farbig hervorgehobenen Diff. |
| **Metadaten** (Info-Symbol) | Zusätzliche, ereignisspezifische Rohdaten im JSON-Format — z. B. Anzahl gelöschter Einträge bei einer automatischen Bereinigung. |

---

## Aufbewahrung & automatische Bereinigung

Damit das Auditprotokoll nicht unbegrenzt wächst, lässt sich unter **Einstellungen → Sicherheit → Auditprotokoll-Aufbewahrung** eine automatische Bereinigung konfigurieren.

| Einstellung | Beschreibung |
| :--- | :--- |
| **Automatische Auditprotokoll-Bereinigung** | Schaltet die automatische Löschung alter Einträge ein oder aus. Ist sie deaktiviert, bleiben alle Einträge unbegrenzt erhalten. |
| **Aufbewahrungszeitraum (Tage)** | Anzahl der Tage, für die Einträge aufbewahrt werden, bevor sie automatisch gelöscht werden. Standard: 90 Tage. |

Ist die automatische Bereinigung aktiviert, läuft nächtlich um 03:00 Uhr ein Hintergrundjob, der alle Einträge löscht, die älter als der konfigurierte Zeitraum sind. Jede durchgeführte Bereinigung wird selbst als Eintrag (`AUDIT_LOG_CLEANUP`) im Protokoll festgehalten — inklusive Anzahl der gelöschten Einträge als Metadaten.

<Alert variant="destructive">
<Icon name="alert-circle" />
<AlertTitle>Gelöschte Einträge sind unwiderruflich weg</AlertTitle>
<AlertDescription>
Weder die automatische Bereinigung noch das manuelle Löschen über die Kommandozeile lassen sich rückgängig machen. Wägen Sie den Aufbewahrungszeitraum insbesondere dann sorgfältig ab, wenn Sie das Auditprotokoll auch zu Compliance- oder Nachweiszwecken nutzen.
</AlertDescription>
</Alert>

### Manuelles Bereinigen über die Kommandozeile

Für Administratoren mit Zugriff auf die Kommandozeile steht zusätzlich der Befehl `crispy:audit-log:purge` zur Verfügung:

```bash
# Einträge löschen, die älter sind als der konfigurierte Aufbewahrungszeitraum (Standard: 90 Tage)
crisp crispy:audit-log:purge

# Einträge löschen, die älter als 30 Tage sind
crisp crispy:audit-log:purge --days=30

# Wirklich ALLE Einträge löschen, unabhängig vom Alter
crisp crispy:audit-log:purge --all

# Bestätigungsabfrage überspringen (z. B. für automatisierte Skripte)
crisp crispy:audit-log:purge --force
```

Der Befehl zeigt vor dem Löschen zunächst an, wie viele Einträge betroffen wären, und fragt — sofern `--force` nicht gesetzt ist — eine Bestätigung ab.

---

## Berechtigungen

| Berechtigung | Beschreibung |
| :--- | :--- |
| **Superuser** | Einzige Rolle mit Zugriff auf **Verwaltung → Auditprotokoll**. |

Die Aufbewahrungseinstellungen unter **Einstellungen → Sicherheit** sind ebenfalls ausschließlich Superusern vorbehalten.
