src/Security/Voter/SwitchUserVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  4. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  5. use Symfony\Component\Security\Core\Security;
  6. use App\Service\Securizer;
  7. use App\Entity\User;
  8. class SwitchUserVoter extends Voter {
  9.     private $security;
  10.     private $securizer;
  11.     public function __construct(Security $security, Securizer $securizer) {
  12.         $this->security = $security;
  13.         $this->securizer = $securizer;
  14.     }
  15.     protected function supports($attribute, $subject) {
  16.         return in_array($attribute, ['CAN_SWITCH_USER']) && $subject instanceof User;
  17.     }
  18.     protected function voteOnAttribute($attribute, $subject, TokenInterface $token) {
  19.         $user = $token->getUser();
  20.         //l'utilisateur doit être connecté et la cible doit être un utilisateur
  21.         if (!$user instanceof User || !$subject instanceof User) {
  22.             return false;
  23.         }
  24.         //on ne peux pas se connecter en tant que sois même, ça n'a aucun sens
  25.         if($user->getId() == $subject->getId()){
  26.             return false;
  27.         }
  28.         //l'utilisateur doit avoir le ROLE_ADMIN
  29.         if (!$this->security->isGranted('ROLE_ADMIN')) {
  30.             return false;
  31.         }
  32.         //Impossible si je ne suis pas SUPERADMIN et que le sujet l'est
  33.         if (!$this->security->isGranted('ROLE_SUPERADMIN') && $this->securizer->isGranted($subject, 'ROLE_SUPERADMIN')) {
  34.             return false;
  35.         }
  36.         //sinon c'est ok.
  37.         return true;
  38.     }
  39. }