src/Voters/AdminVoter.php line 32

Open in your IDE?
  1. <?php
  2. /**
  3.  *
  4.  * (c) BonBonSlick
  5.  *
  6.  */
  7. /**
  8.  *
  9.  * (c) BonBonSlick
  10.  *
  11.  */
  12. declare(strict_types=1);
  13. /*
  14.  * Created by BonBonSlick
  15.  * Contacts: google it
  16.  * Date: 9/17/18
  17.  * Time: 11:41 PM
  18.  */
  19. namespace App\Voters;
  20. use App\Entity\User\User;
  21. use function get_class;
  22. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  23. use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
  24. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  25. use Symfony\Component\Security\Core\User\UserInterface;
  26. final class AdminVoter extends Voter
  27. {
  28.     public const IS_IN_ROLE_ADMIN 'in.role.admin';
  29.     /**
  30.      * @var AccessDecisionManagerInterface
  31.      */
  32.     private $decisionManager;
  33.     /**
  34.      * self constructor.
  35.      * 
  36.      * @param AccessDecisionManagerInterface $decisionManager
  37.      */
  38.     public function __construct(AccessDecisionManagerInterface $decisionManager)
  39.     {
  40.         $this->decisionManager $decisionManager;
  41.     }
  42.     /**
  43.      * {@inheritdoc}
  44.      */
  45.     protected function supports($attribute$subject): bool
  46.     {
  47.         return null !== $subject && get_class($subject) === User::class;
  48.     }
  49.     /**
  50.      * {@inheritdoc}
  51.      */
  52.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  53.     {
  54.         /** @var User $user */
  55.         $user $token->getUser();
  56.         $response false;
  57.         $isGranted false === $user instanceof UserInterface ||
  58.             $this->decisionManager->decide($token, [
  59.                 User::ROLE_ADMIN,
  60.             ]);
  61.         if (false === $isGranted) {
  62.             return $response;
  63.         }
  64.         return true;
  65.     }
  66. }