src/Security/Voter/UserVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Service\HierarchyService;
  4. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  5. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  6. use Symfony\Component\Security\Core\User\UserInterface;
  7. class UserVoter extends Voter
  8. {
  9.     public const EDIT 'PATCH_USER';
  10.     public const DELETE 'DELETE_USER';
  11.     private $hierarchyService;
  12.     public function __construct(
  13.         HierarchyService $hierarchyService
  14.     )
  15.     {
  16.         $this->hierarchyService $hierarchyService;
  17.     }
  18.     protected function supports(string $attribute$subject): bool
  19.     {
  20.         // replace with your own logic
  21.         // https://symfony.com/doc/current/security/voters.html
  22.         return in_array($attribute, [self::EDIT,self::DELETE])
  23.             && $subject instanceof \App\Entity\User;
  24.     }
  25.     protected function voteOnAttribute(string $attribute$userTokenInterface $token): bool
  26.     {
  27.         $userConnected $token->getUser();
  28.         // si l'utilisateur est anonyme, ne pas accorder l'accès
  29.         if (!$userConnected instanceof UserInterface) {
  30.             return false;
  31.         }
  32.         // ... (vérifier les conditions et renvoyer true pour accorder l'autorisation) ...
  33.         switch ($attribute) {
  34.             case self::EDIT:
  35.                 // logique pour déterminer si l'utilisateur connecté peut modifier l'utilisateur cible
  36.                 // return true or false
  37.                 if($user == $userConnected || $this->hierarchyService->isChild($userConnected$user)){
  38.                     return true;
  39.                 }
  40.                 break;
  41.             case self::DELETE:
  42.                 // logique pour déterminer si l'utilisateur connecté peut modifier l'utilisateur cible
  43.                 // return true or false
  44.                 if($user == $userConnected || $this->hierarchyService->isChild($userConnected$user)){
  45.                     return true;
  46.                 }
  47.                 break;
  48.         }
  49.         return false;
  50.     }
  51. }