- <?php
- namespace DocumentBundle\Security;
- use CoreBundle\Entity\Common\MmppUserInterface;
- use CoreBundle\Entity\DocFolder;
- use CoreBundle\Entity\Module;
- use CoreBundle\Entity\Secteur;
- use CoreBundle\Entity\Student;
- use CoreBundle\Entity\StudentSecteur;
- use CoreBundle\Entity\Tutor;
- use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
- use Symfony\Component\Security\Core\Authorization\Voter\Voter;
- class DocFolderVoter extends Voter
- {
-     protected function supports($attribute, $subject)
-     {
-         // if the attribute isn't one we support, return false
-         if (! in_array($attribute, array('view'))) {
-             return false;
-         }
-         // only vote on Post objects inside this voter
-         if (! $subject instanceof DocFolder) {
-             return false;
-         }
-         return true;
-     }
-     /**
-      * {@inheritDoc}
-      * @see \Symfony\Component\Security\Core\Authorization\Voter\Voter::voteOnAttribute()
-      * @param DocFolder $subject
-      */
-     protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
-     {
-         /** @var MmppUserInterface $user */
-         $user = $token->getUser();
-         if ($user->getAdmin()) {
-             return true;
-         }
-         if ($user instanceof Student) {
-             /** @var Secteur $secteur */
-             foreach ($user->getSecteurs() as $secteur) {
-                 if ($subject->getSecteurs()->contains($secteur)) {
-                     return true;
-                 }
-             }
-             /** @var Module $module */
-             foreach ($user->getModules() as $module) {
-                 if ($subject->getModules()->contains($module)) {
-                     return true;
-                 }
-             }
-         } elseif ($user instanceof Tutor) {
-             /** @var Module $module */
-             foreach ($user->getModules() as $module) {
-                 if ($subject->getModules()->contains($module)) {
-                     return true;
-                 }
-             }
-         }
-         return false;
-     }
- }
-