<?php
namespace App\Security\Voter;
use App\Entity\User;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class AccountFirmCollaborateurVoter extends Voter
{
private const ALLOWED_ATTRIBUTES = [
// Ma plateforme de com'
'ACCESS_EMAILING',
'ACCESS_SMS',
'ACCESS_SURVEY',
'ACCESS_EVENT',
'ACCESS_SPONSORSHIP',
'ACCESS_RECOMMENDATION',
'ACCESS_SATISFACTION',
'ACCESS_BIRTHDAY_CLIENT',
'ACCESS_QRCODE',
'ACCESS_SHORT_URL',
'ACCESS_VIDEO_TUTORIAL',
// Identité Visuelle
'ACCESS_LOGOS',
'ACCESS_LETTERHEADS',
'ACCESS_MAIL_SIGNATURE',
'ACCESS_TAMPON',
'ACCESS_SOCIAUX_MEDIA',
'ACCESS_PRINT',
// Mon Site Internet
'ACCESS_STATISTICS',
'ACCESS_NEWSLETTERS',
'ACCESS_OPPORTUNITIES',
'ACCESS_CONTACT',
'ACCESS_CONTACT_PROFESSION',
'ACCESS_CONTACT_CALLBACK',
'ACCESS_CONTACT_CUSTOM',
'ACCESS_SCROLLING_NEWS',
'ACCESS_USEFUL_LINKS',
'ACCESS_BLOG',
'ACCESS_PARTNERS',
'ACCESS_EBOOK',
'ACCESS_INVOICE',
];
protected function supports(string $attribute, $subject): bool
{
return in_array($attribute, self::ALLOWED_ATTRIBUTES, true);
}
protected function voteOnAttribute(string $attribute, mixed $moduleName, TokenInterface $token): bool
{
$user = $token->getUser();
if (!$user instanceof User) {
return false;
}
$userRoles = $user->getRoles();
if (in_array('ROLE_ADMIN', $userRoles, true) || in_array('ROLE_ADMIN_FIRM', $userRoles, true) || in_array('ROLE_FIRM_PARTNER', $userRoles, true)) {
return true;
}
return in_array($attribute, $userRoles, true);
}
}