src/Security/Voter/UpdatePartnerVoter.php line 13

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Security\Voter;
  4. use App\Entity\Partner;
  5. use App\Entity\User;
  6. use App\Repository\PartnerUserRepository;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. final class UpdatePartnerVoter extends Voter
  10. {
  11.     public function __construct(private readonly PartnerUserRepository $partnerUserRepository)
  12.     {
  13.     }
  14.     protected function supports(string $attribute$subject): bool
  15.     {
  16.         if ($attribute === 'update_partner_voter') {
  17.             return true;
  18.         }
  19.         return false;
  20.     }
  21.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  22.     {
  23.         if (!$subject instanceof Partner) {
  24.             return false;
  25.         }
  26.         /** @var ?User $loggedUser */
  27.         $loggedUser $token->getUser();
  28.         if (!$loggedUser) {
  29.             return false;
  30.         }
  31.         $userInstitution $loggedUser
  32.             ->getCurrentRoleInstitution()
  33.             ->getUserInstitution()
  34.             ->getInstitution();
  35.         if ($subject->getInstitution()->getId() === $userInstitution->getId()) {
  36.             return true;
  37.         } 
  38.         
  39.         return (bool) $this->partnerUserRepository->findOneBy(['user' => $loggedUser 'partner' => $subject]);
  40.     }
  41. }