archive: Auftragstabelle statt Marker, exklusiver Abschluss, Quarantäne, Restore über Payload-Identität und signierte Exporte, Schlüsselrotation (Umsetzungsaudit 29.09.: A-01 bis A-15, OPT-6, 5.1 d; 02.10.: O04, O05, O07, O08)
- A-01/A-02/A-04: archive_pending_jobs je Vorgang (ArchivePendingQueue), Depublikationsstand am Auftrag festgehalten, Nachholer ohne Schlüssel FAILURE; archive_pending_at nur noch Sammelmarker - O07: Direktweg und Nachholer beanspruchen den Auftrag unter Zeilensperre - O08: fehlende Snapshot-Datei → Verweis auf den image_removed-Eintrag oder offener Auftrag, nie ein still unvollständiger Nachweis - A-03/A-06: Sweep verschiebt in die Quarantäne, Pause beim Restore, archive:reregister; Restore-Abgleich löscht Anwendungskopien erneut - O04/O05: Restore ordnet über den Payload-Pfad zu; unsignierte Exporte nur mit --accept-unsigned, reregister bricht bei ungültigem/fehlendem Export ab - A-05, A-07 bis A-15: Altbestand als möglicherweise veröffentlicht, Hold- Historie, Zweck per POST, Nachweise gelöschter Bilder nur mit compliance:manage, Anhänge auf ihrer Disk, Schlüssel-ID und ARCHIVE_PREVIOUS_KEYS, HMAC per HKDF, archive:verify-export - 5.1 d: Depublikation im Meldeverfahren trägt legal_request_id PressReleaseService.php enthält zusätzlich K-01 (Prüfung im Publish-Lock), N19 (archive() gibt Kopien frei) und N09 (markImagesPublished nur für auslieferbare Bilder), weil die Datei ungeteilt committet ist. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
c82f279fef
commit
60650baeb8
29 changed files with 2918 additions and 412 deletions
|
|
@ -45,10 +45,12 @@ Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, Ens
|
|||
Volt::route('admin/press-releases/{id}', 'admin.press-releases.show')->name('admin.press-releases.show');
|
||||
Volt::route('admin/press-releases/{id}/edit', 'admin.press-releases.edit')->name('admin.press-releases.edit');
|
||||
// Beweisoriginal und veröffentlichte Fassung (Bildkennzeichnung E.4):
|
||||
// nur hier, nur mit Zweck, jeder Abruf protokolliert.
|
||||
Route::get('admin/press-releases/{id}/images/{image}/original', [PressReleaseImageEvidenceController::class, 'original'])
|
||||
// nur hier, nur mit Zweck (per POST, Audit A-08), jeder Abruf
|
||||
// protokolliert; Restnachweise entfernter Bilder nur mit
|
||||
// compliance:manage (Audit A-11, im Controller).
|
||||
Route::match(['get', 'post'], 'admin/press-releases/{id}/images/{image}/original', [PressReleaseImageEvidenceController::class, 'original'])
|
||||
->whereNumber(['id', 'image'])->name('admin.press-releases.images.original');
|
||||
Route::get('admin/press-releases/{id}/images/{image}/published', [PressReleaseImageEvidenceController::class, 'published'])
|
||||
Route::match(['get', 'post'], 'admin/press-releases/{id}/images/{image}/published', [PressReleaseImageEvidenceController::class, 'published'])
|
||||
->whereNumber(['id', 'image'])->name('admin.press-releases.images.published');
|
||||
|
||||
// Rubriken-Taxonomie: portalweite Struktur — nur admin (Befund H2).
|
||||
|
|
@ -136,8 +138,8 @@ Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, Ens
|
|||
// Beweisarchiv (Bildkennzeichnung Block F): Liste, Legal Hold, Öffnen/Export mit Zweck.
|
||||
Route::middleware('can:compliance:manage')->group(function (): void {
|
||||
Volt::route('admin/archive', 'admin.archive.index')->name('admin.archive.index');
|
||||
Route::get('admin/archive/{entry}/download', [ArchiveEntryController::class, 'download'])->whereNumber('entry')->name('admin.archive.download');
|
||||
Route::get('admin/archive/{entry}/export', [ArchiveEntryController::class, 'export'])->whereNumber('entry')->name('admin.archive.export');
|
||||
Route::match(['get', 'post'], 'admin/archive/{entry}/download', [ArchiveEntryController::class, 'download'])->whereNumber('entry')->name('admin.archive.download');
|
||||
Route::match(['get', 'post'], 'admin/archive/{entry}/export', [ArchiveEntryController::class, 'export'])->whereNumber('entry')->name('admin.archive.export');
|
||||
});
|
||||
|
||||
// Reports
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue