<?php
declare(strict_types=1);
namespace App\Infrastructure\Security\Voter;
use App\Domain\Common\Entity\IzOrderClient;
use App\Domain\Common\Entity\UserAdmin;
use App\Domain\Common\Entity\UserAgent;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
final class SwitchToClientVoter extends Voter
{
protected function supports(string $attribute, $subject): bool
{
return 'CAN_SWITCH_USER' === $attribute && $subject instanceof IzOrderClient;
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$user = $token->getUser();
if ($user instanceof UserAdmin) {
return true;
}
if ($user instanceof UserAgent) {
return $subject->getAgent() === $user;
}
return false;
}
}