Launch-pflichtiger Compliance-Slice: öffentliche Anfrage zu einer PM speist eine
manuelle Admin-Queue (keine KI).
- Migration legal_requests + Model + Enums (Type: dsgvo/personal_rights/report,
Status: open/in_progress/resolved/rejected) + Factory.
- Öffentliches Formular /release/{slug}/rechtliches (LegalRequestController +
web/legal-request.blade.php): typ-abhängiger Hinweistext (Alpine), E-Mail bei
DSGVO/Persönlichkeitsrecht erforderlich, zwei versteckte Honeypot-Felder,
Rate-Limit + Bremse "1 offene Anfrage pro PM/Typ". Regeltexte als Entwurf mit
TODO für rechtliche Finalisierung markiert.
- Routen bewusst in eigener routes/legal.php (entkoppelt vom laufenden Web-Umbau),
host-agnostisch via domains.php eingebunden.
- Admin-Bereich "Recht & Compliance": Sidebar-Nav mit Offen-Zähler, Volt-Queue
index/show (in Bearbeitung/erledigt/abgelehnt/wieder öffnen + interne Notiz).
- Tests: je Typ, Honeypots (Dataset), Bremse, Admin-Queue + Status-Übergänge.
- Doku: Detailplan WS-3-Status + Deployment-Migrationsreihenfolge ergänzt.
Hinweis: Der "Melden"-/E&F-Button auf der PM-Detailseite (release-detail.blade.php)
wird mit dem separaten Web-Frontend-Commit verdrahtet; Ziel ist legal-request.create.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
30 lines
725 B
PHP
30 lines
725 B
PHP
<?php
|
|
|
|
namespace App\Enums;
|
|
|
|
enum LegalRequestStatus: string
|
|
{
|
|
case Open = 'open';
|
|
case InProgress = 'in_progress';
|
|
case Resolved = 'resolved';
|
|
case Rejected = 'rejected';
|
|
|
|
public function label(): string
|
|
{
|
|
return match ($this) {
|
|
self::Open => 'Offen',
|
|
self::InProgress => 'In Bearbeitung',
|
|
self::Resolved => 'Erledigt',
|
|
self::Rejected => 'Abgelehnt',
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Offene Anfragen, die in der Queue Aufmerksamkeit brauchen (für die Bremse
|
|
* „1 offene Anfrage pro PM/Typ" und den Nav-Zähler).
|
|
*/
|
|
public function isOpen(): bool
|
|
{
|
|
return $this === self::Open || $this === self::InProgress;
|
|
}
|
|
}
|