src/App/Security/Voter/AccessControlVoter.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Model\Enum\AccessControl;
  4. use App\Model\Enum\UserRole;
  5. use App\Entity\User;
  6. use App\Security\Guard\ApiGuardToken;
  7. use App\Traits\Autowired\Manager\UserManagerTrait;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. class AccessControlVoter extends AbstractVoter {
  10.     use UserManagerTrait;
  11.     
  12.     protected function getAttributes(): array {
  13.         return AccessControl::getValues();
  14.     }
  15.     
  16.     protected function getEntityClass(): string {
  17.         return User::class;
  18.     }
  19.     
  20.     /**
  21.      * @param string $attribute
  22.      * @param User $subject
  23.      * @param TokenInterface $token
  24.      * @return bool
  25.      */
  26.     protected function voteOnAttribute($attribute$subjectTokenInterface $token) {
  27.         
  28.         $user $token->getUser();
  29.         if (
  30.             $user instanceof User && 
  31.             $token instanceof ApiGuardToken &&
  32.             in_array($attribute$token->getRights()) &&
  33.             in_array($attribute$this->userManager->getAllRightFromUser($user))
  34.         ) {
  35.             return self::ACCESS_GRANTED;
  36.         }
  37.         return self::ACCESS_ABSTAIN;
  38.     }
  39. }