src/Security/Voter/ProjectOwnerVoter.php line 12

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Security\Voter;
  4. use App\Entity\Project;
  5. use App\Entity\User;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. final class ProjectOwnerVoter extends Voter
  9. {
  10.     protected function supports(string $attribute$subject): bool
  11.     {
  12.         if ($attribute === 'project_owner_voter') {
  13.             return true;
  14.         }
  15.         return false;
  16.     }
  17.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  18.     {
  19.         if (!$subject instanceof Project) {
  20.             return false;
  21.         }
  22.         /** @var ?User $loggedUser */
  23.         $loggedUser $token->getUser();
  24.         if (!$loggedUser) {
  25.             return false;
  26.         }
  27.         return $loggedUser->getId() === $subject->getProjectManager()->getId();
  28.     }
  29. }