<?php
namespace App\Infrastructure\Security;
use App\Domain\Common\Entity\User;
use App\Domain\Common\Enum\UserTypeEnum;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class LocalisationVoter extends Voter
{
public const SHOW_LOCALISATION = 'SHOW_LOCALISATION';
protected function supports(string $attribute, $subject): bool
{
return self::SHOW_LOCALISATION === $attribute;
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$grantedUserTypes = [
UserTypeEnum::TYPE_ADMIN,
UserTypeEnum::TYPE_OPAC_VALIDATEUR_N1,
UserTypeEnum::TYPE_OPAC_VALIDATEUR_N2,
UserTypeEnum::TYPE_OPAC_READ_ONLY,
];
$user = $token->getUser();
if (!$user instanceof User) {
return false;
}
return \in_array($user->getType(), $grantedUserTypes);
}
}