packages/Menke/UserBundle/Security/Voter/ClientVoter.php line 16

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