bundles/BackofficeBundle/Security/Authorization/Voter/AddressOwnerVoter.php line 12

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Bdm\BackofficeBundle\Security\Authorization\Voter;
  4. use Bdm\BackofficeBundle\Entity\Address;
  5. use Bdm\BackofficeBundle\Provider\MerchantProvider;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. class AddressOwnerVoter extends Voter
  9. {
  10. const ADDRESS_OWNER = 'ADDRESS_OWNER';
  11. protected \Bdm\BackofficeBundle\Provider\MerchantProvider $oMerchantProvider;
  12. /**
  13. * @param MerchantProvider $oMerchantProvider merchant provider
  14. */
  15. public function __construct(MerchantProvider $oMerchantProvider)
  16. {
  17. $this->oMerchantProvider = $oMerchantProvider;
  18. }
  19. /**
  20. * @param string $sAttribute attribute
  21. * @param mixed $oSubject subject
  22. * @return bool
  23. */
  24. public function supports($sAttribute, $oSubject)
  25. {
  26. if ($sAttribute !== self::ADDRESS_OWNER) {
  27. return false;
  28. }
  29. if ($oSubject instanceof Address) {
  30. return true;
  31. }
  32. return false;
  33. }
  34. /**
  35. * @param string $sAttribute attribute
  36. * @param mixed $oAddress application
  37. * @param TokenInterface $oToken token
  38. * @return bool
  39. */
  40. public function voteOnAttribute($sAttribute, $oAddress, TokenInterface $oToken)
  41. {
  42. $oMerchant = $this->oMerchantProvider->getUser();
  43. return ($oAddress->getMerchant()->getId() === $oMerchant->getId());
  44. }
  45. }