src/ApiBundle/Security/Voter/SecteurVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace ApiBundle\Security\Voter;
  3. use CoreBundle\Entity\Common\MmppUserInterface;
  4. use CoreBundle\Entity\Secteur;
  5. use CoreBundle\Entity\Student;
  6. use CoreBundle\Entity\Tutor;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. class SecteurVoter extends Voter
  10. {
  11.     protected function supports(string $attribute$subject)
  12.     {
  13.         if (!$subject instanceof Secteur) {
  14.             return false;
  15.         }
  16.         return true;
  17.     }
  18.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token)
  19.     {
  20.         $user $token->getUser();
  21.         if (!$user instanceof MmppUserInterface) {
  22.             // the user must be logged in; if not, deny access
  23.             return false;
  24.         }
  25.         /** @var Secteur $secteur */
  26.         $secteur $subject;
  27.         if ($user->getAdmin()) {
  28.             return true;
  29.         }
  30.         if (!$secteur->getActive()) {
  31.             return false;
  32.         }
  33.         if (($user instanceof Tutor) && !$user->getAdmin()) {
  34.             if (!$user->getSecteurs()->contains($secteur)) {
  35.                 return false;
  36.             }
  37.         }
  38.         if ($user instanceof Student) {
  39.             if (!in_array($secteur$user->getSecteurs())) {
  40.                 return false;
  41.             }
  42.         }
  43.         return true;
  44.     }
  45. }