src/Domain/Core/Voter/ClubVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Domain\Core\Voter;
  3. use App\Domain\Application\Voter\AbstractVoter;
  4. use App\Domain\Core\Entity\Club;
  5. use App\Domain\User\Entity\User;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. class ClubVoter extends AbstractVoter
  8. {
  9.     public const DELETE 'delete';
  10.     public function supportsType(string $subjectType): bool
  11.     {
  12.         return is_a($subjectTypeClub::class, true);
  13.     }
  14.     public function supportsAttribute(string $attribute): bool
  15.     {
  16.         return \in_array($attribute, [
  17.             self::DELETE,
  18.         ]);
  19.     }
  20.     /**
  21.      * @param Club $club
  22.      */
  23.     protected function voteOnAttribute(string $attributemixed $clubTokenInterface $token): bool
  24.     {
  25.         $user $token->getUser();
  26.         if (!$user instanceof User) {
  27.             return false;
  28.         }
  29.         return match ($attribute) {
  30.             self::DELETE => $this->canDelete($user$club),
  31.             default => false,
  32.         };
  33.     }
  34.     private function canDelete(User $userClub $club): bool
  35.     {
  36.         return $this->security->isGranted(User::ROLE_SUPER_ADMIN)
  37.             && $club->getTeams()->isEmpty();
  38.     }
  39. }