- <?php
- namespace ApiBundle\Security\Voter;
- use CoreBundle\Entity\Common\MmppUserInterface;
- use CoreBundle\Entity\Secteur;
- use CoreBundle\Entity\Student;
- use CoreBundle\Entity\Tutor;
- use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
- use Symfony\Component\Security\Core\Authorization\Voter\Voter;
- class SecteurVoter extends Voter
- {
-     protected function supports(string $attribute, $subject)
-     {
-         if (!$subject instanceof Secteur) {
-             return false;
-         }
-         return true;
-     }
-     protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token)
-     {
-         $user = $token->getUser();
-         if (!$user instanceof MmppUserInterface) {
-             // the user must be logged in; if not, deny access
-             return false;
-         }
-         /** @var Secteur $secteur */
-         $secteur = $subject;
-         if ($user->getAdmin()) {
-             return true;
-         }
-         if (!$secteur->getActive()) {
-             return false;
-         }
-         if (($user instanceof Tutor) && !$user->getAdmin()) {
-             if (!$user->getSecteurs()->contains($secteur)) {
-                 return false;
-             }
-         }
-         if ($user instanceof Student) {
-             if (!in_array($secteur, $user->getSecteurs())) {
-                 return false;
-             }
-         }
-         return true;
-     }
- }