src/Security/Voter/FormActionsSetVoter.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\FormActionsSet;
  4. use App\Entity\User;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. use Symfony\Component\Security\Core\Security;
  8. class FormActionsSetVoter extends Voter
  9. {
  10.     public const EDIT 'EDIT';
  11.     public const VIEW 'VIEW';
  12.     /** @var Security $security */
  13.     private $security;
  14.     /**
  15.      * @param Security $security
  16.      */
  17.     public function __construct(Security $security)
  18.     {
  19.         $this->security $security;
  20.     }
  21.     /**
  22.      * @param string $attribute
  23.      * @param $subject
  24.      * @return bool
  25.      */
  26.     protected function supports(string $attribute$subject): bool
  27.     {
  28.         return in_array($attribute, [self::EDITself::VIEW]) && ($subject instanceof FormActionsSet || is_null($subject));
  29.     }
  30.     /**
  31.      * @param string $attribute
  32.      * @param $subject
  33.      * @param TokenInterface $token
  34.      * @return bool
  35.      */
  36.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  37.     {
  38.         if (is_null($subject)) {
  39.             return true;
  40.         }
  41.         $user $token->getUser();
  42.         if (!$user instanceof User) {
  43.             return false;
  44.         }
  45.         if ($this->security->isGranted('ROLE_SUPERADMIN')) {
  46.             return true;
  47.         }
  48.         switch ($attribute) {
  49.             case self::EDIT:
  50.                 return $this->canEdit($user$subject);
  51.             case self::VIEW:
  52.                 return $this->canView($user$subject);
  53.         }
  54.         return false;
  55.     }
  56.     /**
  57.      * @param User $user
  58.      * @param FormActionsSet $actionsSet
  59.      * @return bool
  60.      */
  61.     private function canView(User $userFormActionsSet $actionsSet): bool
  62.     {
  63.         return $user->getCompanies()->contains($actionsSet->getForm()->getCampaign()->getCompany());
  64.     }
  65.     /**
  66.      * @param User $user
  67.      * @param FormActionsSet $actionsSet
  68.      * @return bool
  69.      */
  70.     private function canEdit(User $userFormActionsSet $actionsSet): bool
  71.     {
  72.         return $this->canView($user$actionsSet);
  73.     }
  74. }