src/DocumentBundle/Security/DocFolderVoter.php line 15

Open in your IDE?
  1. <?php
  2. namespace DocumentBundle\Security;
  3. use CoreBundle\Entity\Common\MmppUserInterface;
  4. use CoreBundle\Entity\DocFolder;
  5. use CoreBundle\Entity\Module;
  6. use CoreBundle\Entity\Secteur;
  7. use CoreBundle\Entity\Student;
  8. use CoreBundle\Entity\StudentSecteur;
  9. use CoreBundle\Entity\Tutor;
  10. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  11. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  12. class DocFolderVoter extends Voter
  13. {
  14.     protected function supports($attribute$subject)
  15.     {
  16.         // if the attribute isn't one we support, return false
  17.         if (! in_array($attribute, array('view'))) {
  18.             return false;
  19.         }
  20.         // only vote on Post objects inside this voter
  21.         if (! $subject instanceof DocFolder) {
  22.             return false;
  23.         }
  24.         return true;
  25.     }
  26.     /**
  27.      * {@inheritDoc}
  28.      * @see \Symfony\Component\Security\Core\Authorization\Voter\Voter::voteOnAttribute()
  29.      * @param DocFolder $subject
  30.      */
  31.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  32.     {
  33.         /** @var MmppUserInterface $user */
  34.         $user $token->getUser();
  35.         if ($user->getAdmin()) {
  36.             return true;
  37.         }
  38.         if ($user instanceof Student) {
  39.             /** @var Secteur $secteur */
  40.             foreach ($user->getSecteurs() as $secteur) {
  41.                 if ($subject->getSecteurs()->contains($secteur)) {
  42.                     return true;
  43.                 }
  44.             }
  45.             /** @var Module $module */
  46.             foreach ($user->getModules() as $module) {
  47.                 if ($subject->getModules()->contains($module)) {
  48.                     return true;
  49.                 }
  50.             }
  51.         } elseif ($user instanceof Tutor) {
  52.             /** @var Module $module */
  53.             foreach ($user->getModules() as $module) {
  54.                 if ($subject->getModules()->contains($module)) {
  55.                     return true;
  56.                 }
  57.             }
  58.         }
  59.         return false;
  60.     }
  61. }