src/ForumBundle/Security/CategoryVoter.php line 11

Open in your IDE?
  1. <?php
  2. namespace ForumBundle\Security;
  3. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  4. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  5. use CoreBundle\Entity\Category;
  6. use CoreBundle\Entity\Tutor;
  7. use CoreBundle\Entity\Student;
  8. class CategoryVoter extends Voter
  9. {
  10.     public function __construct()
  11.     {
  12.     }
  13.     protected function supports($attribute$subject)
  14.     {
  15.         // if the attribute isn't one we support, return false
  16.         if (! in_array($attribute, array('view'))) {
  17.             return false;
  18.         }
  19.         // only vote on Post objects inside this voter
  20.         if (! $subject instanceof Category) {
  21.             return false;
  22.         }
  23.         return true;
  24.     }
  25.     /**
  26.      * Droit d'accès à une catégorie $subject
  27.      *
  28.      * {@inheritDoc}
  29.      * @see \Symfony\Component\Security\Core\Authorization\Voter\Voter::voteOnAttribute()
  30.      */
  31.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  32.     {
  33.         $user $token->getUser();
  34.         // les tables tutor et student n'ont pas évoluées ensemble, elles présentent pas mal de différences.
  35.         if ($user instanceof Tutor) {
  36.             // si c'est un admin, c'est réglé
  37.             if ($user->getAdmin()) {
  38.                 return true;
  39.             }
  40.             // on vérifie s'il y a un droit d'accès individuel
  41.             if ($user->getCategories()->contains($subject)) {
  42.                 return true;
  43.             }
  44.         } elseif ($user instanceof Student) {
  45.             if ($subject->getTutorOnly() == true) {
  46.                 return false;
  47.             }
  48.             // 1er lvl on vérifie la branche
  49.             if ($subject->getLevel() == 1) {
  50.                 if ($subject->getBranches()->contains($user->getBranche())) {
  51.                     return true;
  52.                 }
  53.             // 2ième (ou plus) level, on vérifie le secteur
  54.             } else {
  55.                 foreach ($user->getStudentSecteurs() as $studentSecteur) {
  56.                     if ($subject->getSecteurs()->contains($studentSecteur->getSecteur())) {
  57.                         if ($subject->getParent()->getBranches()->contains($user->getBranche())) {
  58.                             return true;
  59.                         }
  60.                         //return true;
  61.                     }
  62.                 }
  63.             }
  64.         }
  65.         return false;
  66.     }
  67. }