<?php
namespace App\Security\Voter;
use App\Entity\Order;
use App\Entity\User;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
use Symfony\Bundle\SecurityBundle\Security;
class OrderAuthorization implements VoterInterface
{
/**
* @var Security
*/
private $security;
public function __construct(Security $security)
{
$this->security = $security;
}
public function vote(TokenInterface $token, $subject, array $attributes): int
{
if (!$subject instanceof Order) {
return self::ACCESS_ABSTAIN;
}
if (!in_array('OrderAuthorization', $attributes)) {
return self::ACCESS_ABSTAIN;
}
$user = $token->getUser();
if (!$user instanceof User) {
return self::ACCESS_DENIED;
}
if ($user !== $subject->getUser()) {
return self::ACCESS_DENIED;
}
return self::ACCESS_GRANTED;
}
}