feat(superadmin): migrate internal docs from docusaurus to guava kb
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-02-07 09:58:39 +01:00
parent 1d2242fb4d
commit fb45d1f6ab
77 changed files with 3813 additions and 18636 deletions

View File

@@ -0,0 +1,89 @@
---
title: DSGVO & Compliance-Operationen
---
Dieses Runbook beschreibt praktische Abläufe für DatenschutzAnfragen, Datenlöschung und Aufbewahrungsfristen.
## 1. Grundprinzipien
- Gäste benötigen kein Konto; die meisten Daten sind Event und Fotobezogen.
- Tenant Admins sind in der Regel Verantwortliche im Sinne der DSGVO, Fotospiel fungiert als Auftragsverarbeiter (je nach Vertragsmodell).
- Rechtsgrundlagen, Impressum und Datenschutzerklärungen werden über die LegalPages im Admin verwaltet dieses Dokument fokussiert sich auf **Betriebsprozesse**.
## 2. Typische Anfragen & Aktionen
- **Auskunftsanfragen**
- Gast möchte wissen, ob Fotos von ihm/ihr gespeichert sind.
- Typischer Ablauf:
- Gast an Tenant verweisen (wenn Veranstalter Ansprechpartner ist).
- Falls Fotospiel direkt handeln muss: Event/FotoIDs anhand bereitgestellter Infos identifizieren (z.B. Link, Screenshot, Zeitfenster).
- Relevante Datensätze in DB (Fotos, Likes, Meldungen) lokalisieren und dokumentieren.
- **Löschanfragen**
- Ein Gast/Tenant bittet um Löschung spezifischer Fotos oder eines ganzen Events.
- Vorgehen:
1. Identität und Berechtigung prüfen (z.B. Tenant Admin, verifizierte Anfrage).
2. Fotos/Ereignisse über Admin UI oder interne Tools löschen/archivieren.
- Sicherstellen, dass `event_media_assets` und ArchivSpeicher ebenfalls bereinigt werden.
3. Prüfen, ob Logs/Audits pseudonymisiert bleiben können, ohne personenbezogene Inhalte.
4. Anfrage und Zeitpunkt dokumentieren (Ticket, internes Log).
- **Datenexport**
- Tenant will einen Export seiner Daten (Events, Medien, Statistiken).
- Nutzung der vorhandenen ExportFunktionen (z.B. CSV/ZIP im Admin) bevorzugen.
- Falls diese nicht ausreichen, manuelle Exporte via Skript/DB mit Datenschutz im Blick (keine unnötigen Felder).
- Beispiel: nur die Felder exportieren, die für den Zweck der Anfrage wirklich notwendig sind (kein DebugLog, keine internen IDs, sofern nicht sinnvoll).
### 2.1 Konkrete Tools & Endpoints
- **Profil-Datenexport (User-Ebene)**
- Controller: `App\Http\Controllers\ProfileDataExportController`.
- UI: Profilbereich der Tenant Admin PWA; Nutzer kann dort einen Export anstoßen.
- Ablauf:
1. Nutzer triggert Export → `ProfileDataExportController::store()` legt einen `DataExport`Eintrag an (`status = pending`) und dispatcht `GenerateDataExport`.
2. Der Job `GenerateDataExport` erstellt ein ZIP mit relevanten Daten und setzt `status = ready`, `path`, ggf. `expires_at`.
3. Nutzer kann die Datei über `ProfileDataExportController::download()` abrufen, solange `isReady()` und nicht `hasExpired()`.
- Ops-Sicht:
- Wenn Exporte „hängen bleiben“ (lange `pending`/`processing`), Queue/Horizon und Logs prüfen, ggf. Job neu anstoßen.
- Für DSGVOExports bevorzugt diesen Pfad nutzen, statt adhoc DBAbfragen.
- **Account-Anonymisierung (User/Tenant-Ebene)**
- Service: `App\Services\Compliance\AccountAnonymizer`.
- Job: `App\Jobs\AnonymizeAccount` nutzt diesen Service typischerweise im Hintergrund.
- Verhalten:
- Löscht/entfernt Medien (`EventMediaAsset`, `Photo`) für einen Tenant.
- Anonymisiert Tenant und UserDaten (setzt neutrale Namen, entfernt Kontaktinfos, sperrt Accounts).
- Ops-Sicht:
- Nur nach klarer Freigabe einsetzen, da Anonymisierung irreversibel ist.
- Vor Einsatz prüfen, ob für den betreffenden Tenant alle vertraglichen Zusagen (z.B. Datenexport) erfüllt sind.
## 3. Retention & automatisierte Löschung
- **Event-bezogene Aufbewahrung**
- StandardRetentionsfristen für Events/Fotos (z.B. X Tage nach Eventende/Archivierung) laut ProduktSpezifikation.
- Jobs/Kommandos, die nach Ablauf Medien archivieren oder löschen (siehe `docs/ops/media-storage-spec.md`).
- **Logs**
- Aufbewahrungsdauer von ApplikationsLogs (z.B. 3090 Tage), Rotation/Anonymisierung.
- **Konfiguration pro Tenant**
- Wenn Tenants eigene Retention wünschen, prüfen ob das UI/ConfigModel dies unterstützt (nicht adhoc in SQL ändern).
## 4. Operative Checkliste bei DSGVO-Fällen
1. Anfrage klassifizieren (Auskunft, Löschung, Export, Sonstiges).
2. Verantwortlichkeit klären (Tenant vs. Fotospiel).
3. Technische Schritte definieren (welche Events/Fotos/Accounts betroffen).
4. Durchführung:
- In Admin UI oder via internen Tools.
- Medien/Metadaten konsistent behandeln (keine „hängenden“ Records).
5. Dokumentation:
- Ticket/E-MailThread mit Datum, Betreff, Maßnahmen.
6. FollowUp:
- Prüfen, ob Runbooks/Automatisierungen angepasst werden sollten (z.B. besserer SelfService für Tenants).
## 5. Verbindung zu Security-Hardening
Das SecurityHardeningEpic wird in bd-Issues gepflegt und enthält mehrere DSGVOrelevante Workstreams:
- Signierte AssetURLs statt direkter StorageLinks.
- Verbesserte Token/AuthFlows.
- StorageHealth und ChecksummenVerifizierung.
Wenn dort neue Features produktiv gehen, sollten die Auswirkungen auf DSGVOProzesse in diesem Runbook ergänzt werden.

View File

@@ -0,0 +1,77 @@
---
title: How-to DSGVO-Löschung eines Fotos
---
Dieses Howto beschreibt den operativen Ablauf, wenn ein Gast verlangt, dass ein konkretes Foto DSGVOkonform gelöscht wird.
## 1. Anfrage & Berechtigung prüfen
Bevor du etwas löschst:
- Handelt der Gast über den Veranstalter (Tenant) oder direkt bei Fotospiel?
- Kann das Foto eindeutig identifiziert werden?
- Am besten via Link zur Galerie / FotoDetailseite.
- Alternativ via Screenshot + EventName + Zeitfenster.
- Ist der Tenant (Veranstalter) einverstanden?
- In der Regel sollte die Entscheidung, ob ein Foto gelöscht wird, beim Tenant liegen, sofern der Vertrag dies vorsieht.
Alle relevanten Informationen und Entscheidungen sollten im Ticket erfasst werden.
## 2. Foto im System identifizieren
1. Über die AdminUI:
- In der Tenant Admin PWA den betroffenen Event öffnen.
- Foto über Moderations/Galerieansicht suchen.
- ID des Fotos notieren (sofern sichtbar) oder den direkten AdminLink verwenden.
2. Falls nötig, über DB/Logs:
- Anhand von Dateinamen/URLs aus Logs (`event_media_assets.path`, `photos.thumbnail_path`) das Foto lokalisieren.
## 3. Löschung über Admin-UI (präferiert)
Wenn die AdminOberfläche eine Delete/HideFunktion bietet:
1. Tenant Admin das Foto über das Moderationsinterface löschen lassen.
2. Sicherstellen, dass:
- Foto nicht mehr in Galerie/Moderationslisten erscheint.
- ShareLinks oder öffentliche Galerien das Foto nicht mehr anzeigen.
3. Falls es trotzdem noch angezeigt wird:
- Caches prüfen (Browser, CDN, ggf. ThumbnailCaches).
## 4. Technischer Löschpfad (Backend)
Falls eine UILöschung nicht ausreicht oder du nachkontrollieren willst:
1. **Datenbank**
- `photos`:
- Prüfen, dass der Eintrag für das Foto gelöscht oder hinreichend anonymisiert wurde.
- `event_media_assets`:
- Alle Einträge, die auf dieses Foto (`photo_id`) zeigen, identifizieren.
- Pfade (`disk`, `path`) notieren.
2. **Storage**
- Für alle relevanten `EventMediaAsset`Einträge:
- Dateien im Hot/ArchiveStorage löschen (Original + Derivate/Thumbnails).
3. **Verknüpfungen**
- Sicherstellen, dass keine weiteren Verweise existieren:
- Likes/Statistiken für dieses Foto (z.B. `photo_likes`) optional mit entfernen, sofern vorhanden.
> Hinweis: Wenn ihr `AccountAnonymizer` auf Tenant/UserEbene verwendet, löscht dieser im Regelfall großflächig Medien. Für Einzelfälle (ein Foto) ist der oben skizzierte Weg geeigneter.
## 5. Dokumentation & Bestätigung
- Im Ticket festhalten:
- Welches Foto (Event, ID/URL).
- Wer die Löschung veranlasst und genehmigt hat.
- Welche Schritte tatsächlich durchgeführt wurden (UI, DB, Storage).
- Tenant/Gast informieren:
- Bestätigung, dass das Foto aus Galerie und Speicher entfernt wurde.
- Hinweis, dass ggf. Browser/CDNCaches eine kurze Zeit nachlaufen können, aber keine neuen Zugriffe mehr möglich sind.
## 6. Präventive Verbesserungen
Wenn dieser Vorgang häufig vorkommt:
- Prüfen, ob die AdminUI einen klareren, selbstbedienbaren Weg zur FotoLöschung bietet.
- Sicherstellen, dass die Dokumentation für Tenant Admins (siehe HelpCenter) erklärt, wie sie Fotos eigenständig löschen und wie sich das auf Gäste auswirkt.
Dieses Howto ergänzt `docs/ops/compliance-dsgvo-ops.md` um einen konkreten Einzelfall. Für komplexere AnonymisierungsSzenarien siehe den Abschnitt zum `AccountAnonymizer`.

View File

@@ -0,0 +1,50 @@
---
title: Howto TenantKomplettExport
---
Dieses Howto beschreibt, wie du für einen Tenant kurz vor Vertragsende einen möglichst vollständigen DatenExport erstellst.
## 1. Anfrage prüfen
- Schriftliche Anfrage des Tenants (EMail/Ticket).
- Klarer Scope:
- Nur Medien?
- Medien + Metadaten (Events, Gäste, Likes)?
- BillingNachweise (Rechnungen)?
## 2. MedienExport
- Für jeden relevanten Event:
- Prüfen, ob alle UploadJobs durch sind (`event_media_assets` ohne `pending`/`failed`).
- ArchivExport nutzen (sofern vorhanden) oder:
- MedienOrdner pro Event aus dem Storage exportieren.
- Thumbnails optional, Originale Pflicht.
## 3. MetadatenExport
- Events, Gäste, Likes, Kommentare nach Bedarf exportieren:
- Entweder über bestehende ExportFunktion (CSV/JSON).
- Oder über einen einmaligen, internen Report (z.B. `php artisan make:report`ähnlicher Flow, falls vorhanden).
- Output als ZIP mit klarer Ordnerstruktur:
- `media/`
- `metadata/events.csv`
- `metadata/guests.csv`
## 4. Billing-Unterlagen
- Rechnungen / Zahlungsbelege:
- Lemon SqueezyBelege (Links oder PDFs).
- Interne RechnungsPDFs (falls generiert).
## 5. Nach dem Export
- Export dem Tenant sicher zur Verfügung stellen (z.B. DownloadLink mit Ablaufdatum).
- Dokumentieren:
- Datum des Exports.
- Umfang (welche Tabellen/Events enthalten).
- Speicherort und Aufbewahrungsdauer des ExportBundles.
Siehe auch:
- `docs/ops/compliance-dsgvo-ops.md`
- `docs/ops/backup-restore.md`