- 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>
49 lines
1.3 KiB
PHP
49 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
|
|
/**
|
|
* Lesender Zugriff auf einen Archiveintrag (Beweisarchiv 4.3): wer, wann,
|
|
* wozu. Insert-only. Seit dem Umsetzungsaudit 29.09.2026 (A-07) auch
|
|
* Legal Hold setzen/aufheben (`hold_set`/`hold_released`, Vermerk als
|
|
* Zweck) und Name/E-Mail des Admins, damit die Zeile eine Kontolöschung
|
|
* überlebt.
|
|
*/
|
|
class ArchiveAccessLog extends Model
|
|
{
|
|
public $timestamps = false;
|
|
|
|
protected $table = 'archive_access_log';
|
|
|
|
protected $fillable = ['entry_id', 'admin_id', 'admin_name', 'admin_email', 'action', 'purpose', 'accessed_at'];
|
|
|
|
protected function casts(): array
|
|
{
|
|
return ['accessed_at' => 'datetime'];
|
|
}
|
|
|
|
protected static function booted(): void
|
|
{
|
|
static::updating(fn () => throw new \LogicException('archive_access_log ist insert-only.'));
|
|
static::deleting(fn () => throw new \LogicException('archive_access_log wird nicht gelöscht.'));
|
|
}
|
|
|
|
/**
|
|
* @return BelongsTo<ArchiveEntry, $this>
|
|
*/
|
|
public function entry(): BelongsTo
|
|
{
|
|
return $this->belongsTo(ArchiveEntry::class, 'entry_id');
|
|
}
|
|
|
|
/**
|
|
* @return BelongsTo<User, $this>
|
|
*/
|
|
public function admin(): BelongsTo
|
|
{
|
|
return $this->belongsTo(User::class, 'admin_id');
|
|
}
|
|
}
|