<?php
declare(strict_types=1);
namespace Bdm\BackofficeBundle\Security\Authorization\Voter;
use Bdm\BackofficeBundle\Entity\Address;
use Bdm\BackofficeBundle\Provider\MerchantProvider;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class AddressOwnerVoter extends Voter
{
const ADDRESS_OWNER = 'ADDRESS_OWNER';
protected \Bdm\BackofficeBundle\Provider\MerchantProvider $oMerchantProvider;
/**
* @param MerchantProvider $oMerchantProvider merchant provider
*/
public function __construct(MerchantProvider $oMerchantProvider)
{
$this->oMerchantProvider = $oMerchantProvider;
}
/**
* @param string $sAttribute attribute
* @param mixed $oSubject subject
* @return bool
*/
public function supports($sAttribute, $oSubject)
{
if ($sAttribute !== self::ADDRESS_OWNER) {
return false;
}
if ($oSubject instanceof Address) {
return true;
}
return false;
}
/**
* @param string $sAttribute attribute
* @param mixed $oAddress application
* @param TokenInterface $oToken token
* @return bool
*/
public function voteOnAttribute($sAttribute, $oAddress, TokenInterface $oToken)
{
$oMerchant = $this->oMerchantProvider->getUser();
return ($oAddress->getMerchant()->getId() === $oMerchant->getId());
}
}