auth/security: API-Firmenzuordnung nur für Mitglieder oder Allowlist, Google-Vorabübernahme geschlossen, gemeinsamer Login-Abschluss (Umsetzungsaudit 29.09.: R-01, K-04, K-07, K-08, B-10)
- R-01: ApiNewsroomAssignment hängt an eine bestehende Firma nur noch Owner, Mitglieder oder Nutzer aus NEWSROOM_API_ASSIGNMENT_USER_IDS; Pivot mit granted_via = api; Befehl company-memberships:api-assignments (Liste, --remove mit Vorschau) - K-04: OAuth-Verifikation eines offenen Kontos verwirft Passwort, remember_token und Sanctum-Tokens; SessionRevocation + Middleware EnsureSessionIsNotRevoked widerruft alte Sessions (Redis-tauglich) - K-08: LoginCompletion für Passwort, Magic Link und Google — last_login_at und Anmeldemethode auch nach 2FA, Landeziel über die Challenge, Google ohne erzwungenes remember, magic-login ohne guest für eigene Links - B-10: eigener Magic-Link-Zweck image_confirmation (Migration) - K-07: legalAcceptanceVersions #[Locked], Versionswechsel beim Absenden wird abgelehnt, Gate-Abfragen je Request zwischengespeichert Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
3dbc3fa673
commit
1ccb4a8479
29 changed files with 1287 additions and 73 deletions
|
|
@ -36,6 +36,7 @@ use App\Observers\EmailDomainObserver;
|
|||
use App\Observers\ImageRightsConfirmationObserver;
|
||||
use App\Observers\PressReleaseSearchObserver;
|
||||
use App\Services\Admin\AdminRequestPerformanceMetrics;
|
||||
use App\Services\Auth\SessionRevocation;
|
||||
use App\Services\Mail\DnsResolver;
|
||||
use App\Services\Mail\SystemDnsResolver;
|
||||
use App\Services\Newsletter\NullNewsletterSyncClient;
|
||||
|
|
@ -166,6 +167,10 @@ class AppServiceProvider extends ServiceProvider
|
|||
Event::listen(Registered::class, [RecordAuthActivity::class, 'recordRegistered']);
|
||||
Event::listen(Login::class, [RecordAuthActivity::class, 'recordLogin']);
|
||||
|
||||
// Anmeldezeitpunkt in der Session — Grundlage für das Beenden fremder
|
||||
// Sessions nach einer Kontoübernahme (Audit K-04, SessionRevocation).
|
||||
Event::listen(Login::class, [SessionRevocation::class, 'stampLogin']);
|
||||
|
||||
// Das eine Gate vor jeder ausgehenden Mail: Suppression, Return-Path,
|
||||
// Circuit Breaker (Roadmap 1b.6). Gibt false zurück → Mail geht nicht raus.
|
||||
Event::listen(MessageSending::class, [GateOutgoingMail::class, 'gate']);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue