src/Security/Voter/OAuthClientVoter.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use Menke\UserBundle\Entity\User;
  4. use Menke\UserBundle\Entity\Client;
  5. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  8. use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
  9. /**
  10.  * Security voter to grant frontend access by client.
  11.  *
  12.  * @package App\Security\Voter
  13.  */
  14. class OAuthClientVoter extends Voter
  15. {
  16.     /**
  17.      * @var AccessDecisionManagerInterface
  18.      */
  19.     protected $decisionManager;
  20.     /**
  21.      * ClientVoter constructor.
  22.      * @param AccessDecisionManagerInterface $decisionManager
  23.      */
  24.     public function __construct(AccessDecisionManagerInterface $decisionManager)
  25.     {
  26.         $this->decisionManager $decisionManager;
  27.     }
  28.     /**
  29.      * @return bool
  30.      */
  31.     protected function supports($attribute$subject)
  32.     {
  33.         return $attribute === 'has_client';
  34.     }
  35.     /**
  36.      * @return bool
  37.      */
  38.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  39.     {
  40.         if ($token instanceof UsernamePasswordToken) {
  41.             return false;
  42.         }
  43.         $user $token->getUser();
  44.         $client null;
  45.         if ($user instanceof User) {
  46.             $client $user->getClient();
  47.         } else {
  48.             $client $user->getApplicationClient();
  49.         }
  50.         if (empty($client)) {
  51.             return false;
  52.         }
  53.         if ($client instanceof Client) {
  54.             return true;
  55.         }
  56.         return false;
  57.     }
  58. }