privacy: Löschfristen für Aktivitätsverlauf (395 Tage) und API-Zugriffsprotokoll (90 Tage)

Beide Tabellen hatten keine Frist; activity_events trägt Namen und Adressen
im Klartext, api_usage_logs IP und User-Agent. MassPrunable, täglich 04:05
über model:prune, Fristen in config/monitoring.php (Roadmap 4.2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-10-09 13:35:54 +00:00
parent d1b9ffdcf1
commit 002dc08b5c
5 changed files with 127 additions and 4 deletions

View file

@ -3,6 +3,8 @@
namespace App\Models;
use App\Enums\ActivityType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\MassPrunable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;
@ -13,6 +15,8 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
*/
class ActivityEvent extends Model
{
use MassPrunable;
public $timestamps = false;
protected $fillable = [
@ -50,4 +54,14 @@ class ActivityEvent extends Model
{
return $this->morphTo();
}
/**
* Einträge nach der Löschfrist (config monitoring.retention, 395 Tage).
*
* @return Builder<static>
*/
public function prunable(): Builder
{
return static::query()->where('occurred_at', '<', now()->subDays((int) config('monitoring.retention.activity_events_days')));
}
}

View file

@ -2,12 +2,16 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\MassPrunable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Laravel\Sanctum\PersonalAccessToken;
class ApiUsageLog extends Model
{
use MassPrunable;
public $timestamps = false;
protected $fillable = [
@ -45,4 +49,14 @@ class ApiUsageLog extends Model
{
return $this->belongsTo(PersonalAccessToken::class);
}
/**
* Zugriffe nach der Löschfrist (config monitoring.retention, 90 Tage).
*
* @return Builder<static>
*/
public function prunable(): Builder
{
return static::query()->where('requested_at', '<', now()->subDays((int) config('monitoring.retention.api_usage_logs_days')));
}
}