src/Security/Voter/FrontendClientVoter.php line 16

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