hasValidSignature()) { return; } abort_unless(auth()->check(), 404); Gate::authorize('view', $pressRelease); } /** * Öffentliche Sichtbarkeit aus den bereits geladenen Modellen ermitteln * (PM inkl. `company` werden vom Controller eager-geladen), statt eine * separate EXISTS-Abfrage je Medien-Request zu fahren. */ protected function pressReleaseMediaIsPublic(PressRelease $pressRelease): bool { $company = $pressRelease->company; return $pressRelease->isVisibleInArchive() && $company !== null && (bool) $company->is_active; } /** * Cache-Control für die Auslieferung. Öffentliche Medien werden lange * gecacht (Browser/CDN), damit die PHP-Route auf den hochfrequenten * Archiv-/Detailseiten nicht bei jedem Bild erneut getroffen wird; nicht * öffentliche (Vorschau/geschützt) werden nie gecacht. */ protected function mediaCacheControl(bool $isPublic): string { return $isPublic ? 'public, max-age=86400' : 'private, no-store'; } }