isAdmin($user)) { return true; } return null; } public function view(?User $user, NovaCard $card): bool { return $card->canBeViewedBy($user); } public function create(?User $user): bool { return (bool) $user; } public function update(User $user, NovaCard $card): bool { return $card->isOwnedBy($user) && in_array($card->status, [NovaCard::STATUS_DRAFT, NovaCard::STATUS_PROCESSING, NovaCard::STATUS_PUBLISHED], true); } public function delete(User $user, NovaCard $card): bool { return $card->isOwnedBy($user); } public function publish(User $user, NovaCard $card): bool { return $card->isOwnedBy($user); } public function comment(User $user, NovaCard $card): bool { return $card->canReceiveCommentsFrom($user); } public function allowExport(?User $user, NovaCard $card): bool { if ($card->isOwnedBy($user)) { return true; } return (bool) $card->allow_export; } public function allowBackgroundReuse(?User $user, NovaCard $card): bool { if ($card->isOwnedBy($user)) { return true; } return (bool) $card->allow_background_reuse; } public function moderate(User $user): bool { return $this->isModerator($user); } private function isAdmin(User $user): bool { if (method_exists($user, 'isAdmin')) { return (bool) $user->isAdmin(); } if (method_exists($user, 'hasRole')) { return (bool) $user->hasRole('admin'); } return false; } private function isModerator(User $user): bool { if ($this->isAdmin($user)) { return true; } if (method_exists($user, 'isModerator')) { return (bool) $user->isModerator(); } if (method_exists($user, 'hasRole')) { return (bool) $user->hasRole('moderator'); } return false; } }