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 ($subject->isDeleted()) {
  39.             return false;
  40.         } 
  41.         // student or tutor ?
  42.         if ($subject->getApplication() !== $user->class) {
  43.             return false;
  44.         }
  45.         // user's own folder
  46.         if ($subject->getType() === 'perso') {
  47.             if ($subject->getUserId() === $user->getId()) {
  48.                 return true;
  49.             }
  50.             return false;
  51.         }
  52.         if ($user instanceof Student) {
  53.             /** @var Secteur $secteur */
  54.             foreach ($user->getSecteurs() as $secteur) {
  55.                 if ($subject->getSecteurs()->contains($secteur)) {
  56.                     return true;
  57.                 }
  58.             }
  59.             /** @var Module $module */
  60.             foreach ($user->getModules() as $module) {
  61.                 if ($subject->getModules()->contains($module)) {
  62.                     return true;
  63.                 }
  64.             }
  65.         } elseif ($user instanceof Tutor) {
  66.             /** @var Module $module */
  67.             foreach ($user->getModules() as $module) {
  68.                 if ($subject->getModules()->contains($module)) {
  69.                     return true;
  70.                 }
  71.             }
  72.         }
  73.         return false;
  74.     }
  75. }