src/Security/Voter/UtilisateursVoter.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\User;
  4. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  5. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  6. use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
  7. use Symfony\Component\Yaml\Yaml;
  8. use Doctrine\ORM\EntityManager
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. use App\Entity\Permission;
  11. use App\Repository\RoleRepository;
  12. class UtilisateursVoter Implements VoterInterface {
  13.     
  14.     protected $actions = array();
  15.     
  16.     public function __construct(\Doctrine\ORM\EntityManagerInterface $entityManager, \Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface $tokenStorage){
  17.         $this->entityManager $entityManager;
  18.         $this->tokenStorage $tokenStorage;
  19.     }
  20.     
  21.     // Symfony demandera à cette classe si elle prend en charge ce type d'action sur cet objet
  22.     protected function supports($attributes$subject) {
  23.         // Si c'est attribut ne supportant pas un des sujets on dégage
  24.         if (!in_array($attributes[0], $this->actions) && !strstr($attributes[0], "utilisateurs_")) {
  25.             return false;
  26.         }
  27.         return true;
  28.     }
  29.     /**
  30.      *
  31.      * @param type $attribute représente l'action qu'on tente de faire
  32.      * @param type $subject
  33.      * @param TokenInterface $token
  34.      * @return boolean
  35.      * @throws \LogicException
  36.      */
  37.     public function vote(TokenInterface $token$subject,array $attributes): int {
  38.         if(!$this->supports($attributes$subject)){
  39.             return false;
  40.         }
  41.         
  42.         $user $this->tokenStorage->getToken()->getUser();
  43.         // L'utilisateur doit être connecté
  44.         if (!$user instanceof User) {
  45.             return false;
  46.         }
  47.         // à ce stade le sujet est forcément un objet DemandeRecrutement ( grace à la méthode supports )
  48.         /** @var DemandeRecrutement $dr */
  49.         $dr $subject;
  50.         switch ($attributes[0]) {
  51.             default:
  52.                 return $this->canDo($attributes[0],$user);
  53.                 break;
  54.         }
  55.         
  56.         throw new \LogicException('Action Interdite!');
  57.     }
  58.     public function isAllowed($droit$user) {
  59.         $userRole $user->getRole();
  60.         // Si user superadmin
  61.         if ($userRole->getId() == \App\Enum\RoleCollection::SUPERADMIN_ID) {
  62.             return true;
  63.         }
  64.         
  65.         $objDroit $this->entityManager->getRepository(\App\Entity\Permission::class)->findOneByCode($droit);
  66.        
  67.         if(is_null($objDroit)){
  68.             return false;
  69.         }
  70.         
  71.         $arrRoles $objDroit->getRole($userRole)->toArray();
  72.         if(empty($arrRoles)){
  73.             return false;
  74.         }
  75.         foreach($arrRoles as $role){
  76.             if($role->getId() == $userRole->getId()){
  77.                 return true;
  78.             }
  79.         }
  80.         
  81.         return false;
  82.     }
  83.     
  84.     private function canDo($action,User $user){
  85.         return $this->isAllowed($action$user);
  86.     }
  87. }