<?php
namespace App\Security\Voter;
use App\Entity\User;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class ModuleVoter extends Voter
{
protected function supports(string $attribute, $subject): bool
{
return in_array($attribute, [
'NEWSLETTER',
'ANNOUNCEMENT',
'PRIMARY_NEWS',
'EBOOK',
'USEFUL_LINK',
'NEWS',
'TOOLS',
'ACCOUNTING_NEWS',
'PARTNERS',
'ACTU_RS',
'SIMULATEUR',
'CONTACT',
'CONTACT_PROFESSION',
'CONTACT_ETRE_RAPPELE',
'CONTACT_CUSTOM',
'NEW_NEWSLETTER',
'NEW_COMPANY',
'INVOICES',
'ANIMATION',
'DIAPORAMA',
'MODULE_VIDEO'
]);
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$user = $token->getUser();
// if the user is anonymous, do not grant access
if (!$user instanceof User) {
return false;
}
$modules = $user->getAccountingFirm() ? $user->getAccountingFirm()->getParameters()->getModules() : array();
switch ($attribute) {
case 'NEWSLETTER':
return array_key_exists('Newsletter', $modules) && true === $modules['Newsletter'];
case 'PRIMARY_NEWS':
return array_key_exists('Actualite_a_la_une', $modules) && true === $modules['Actualite_a_la_une'];
case 'NEWS':
return array_key_exists('Actualites', $modules) && true === $modules['Actualites'];
case 'ANNOUNCEMENT':
return array_key_exists('Annonces', $modules) && true === $modules['Annonces'];
case 'USEFUL_LINK':
return array_key_exists('Liens_utils', $modules) && true === $modules['Liens_utils'];
case 'EBOOK':
return array_key_exists('Livre_blanc', $modules) && true === $modules['Livre_blanc'];
case 'TOOLS':
return array_key_exists('Tools', $modules) && true === $modules['Tools'];
case 'ACCOUNTING_NEWS':
return array_key_exists('Actualite_du_mois', $modules) && true === $modules['Actualite_du_mois'];
case 'PARTNERS':
return array_key_exists('Partners', $modules) && true === $modules['Partners'];
case 'ACTU_RS':
return array_key_exists('Actu_rs', $modules) && true === $modules['Actu_rs'];
case 'SIMULATEUR':
return array_key_exists('Simulateur', $modules) && true === $modules['Simulateur'];
case 'CONTACT':
return array_key_exists('Contact', $modules) && true === $modules['Contact'];
case 'CONTACT_PROFESSION':
return array_key_exists('Contact_profession', $modules) && true === $modules['Contact_profession'];
case 'CONTACT_ETRE_RAPPELE':
return array_key_exists('Contact_etreRappele', $modules) && true === $modules['Contact_etreRappele'];
case 'CONTACT_CUSTOM':
return array_key_exists('Contact_custom', $modules) && true === $modules['Contact_custom'];
case 'NEW_NEWSLETTER':
return array_key_exists('Inscription_newsletter', $modules) && true === $modules['Inscription_newsletter'];
case 'NEW_COMPANY':
return array_key_exists('Creation_entreprise', $modules) && true === $modules['Creation_entreprise'];
case 'INVOICES':
return ($user->getAccountingFirm() && $user->getAccountingFirm()->getIdsellsy() !== null) ? true : false;
case 'ANIMATION':
return array_key_exists('Animation', $modules) && true === $modules['Animation'];
case 'DIAPORAMA':
return array_key_exists('Diaporama', $modules) && true === $modules['Diaporama'];
case 'MODULE_VIDEO':
return array_key_exists('Module_video', $modules) && true === $modules['Module_video'];
}
return false;
}
}