is_super_admin ? true : null; } public function viewAny(User $user): bool { return $user->canAccessCustomer(); } public function view(User $user, PressRelease $pressRelease): bool { if ($user->canAccessAdmin()) { return true; } return $this->canManage($user, $pressRelease); } public function create(User $user): bool { return $user->canAccessCustomer(); } public function update(User $user, PressRelease $pressRelease): bool { if (! $this->canManage($user, $pressRelease) && ! $user->canAccessAdmin()) { return false; } return in_array( $pressRelease->status, [PressReleaseStatus::Draft, PressReleaseStatus::Rejected, PressReleaseStatus::Review], true, ) || $user->canAccessAdmin(); } public function submitForReview(User $user, PressRelease $pressRelease): bool { return $this->canManage($user, $pressRelease) && in_array($pressRelease->status, [PressReleaseStatus::Draft, PressReleaseStatus::Rejected], true); } public function delete(User $user, PressRelease $pressRelease): bool { if ($user->canAccessAdmin()) { return true; } return $this->canManage($user, $pressRelease) && $pressRelease->status !== PressReleaseStatus::Published; } public function restore(User $user, PressRelease $pressRelease): bool { return $user->canAccessAdmin(); } public function forceDelete(User $user, PressRelease $pressRelease): bool { return $user->is_super_admin === true; } public function publish(User $user, PressRelease $pressRelease): bool { return $user->canAccessAdmin() && $user->can('press-releases:publish'); } /** * Veröffentlichungsnachweis darf laden, wer die PM verwalten darf (Autor * oder Firmenmitglied) bzw. ein Admin. Ob der Nachweis bereits gekauft * wurde, prüft der ProofPdfService separat. */ public function downloadProof(User $user, PressRelease $pressRelease): bool { return $user->canAccessAdmin() || $this->canManage($user, $pressRelease); } /** * Zugriff auf eine PM hat der Autor ODER ein Mitglied der zugeordneten * Firma (Owner/Team-Mitglied). So sehen/bearbeiten Firmenkontakte – inkl. * der per Magic-Link lazy angelegten Accounts – die PMs ihrer Firma. */ private function canManage(User $user, PressRelease $pressRelease): bool { return $this->isAuthor($user, $pressRelease) || $user->canAccessCompany($pressRelease->company_id); } private function isAuthor(User $user, PressRelease $pressRelease): bool { return $pressRelease->user_id === $user->id; } }