<?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;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Core\User\UserInterface;
class PraticaDashboardVoter extends Voter
{
// group must be separated by single underline, multiple words could be separated by double underline
// for example DASHBOARD_MEMO_VISUALIZZA__ASSEGNATARIO -> DASHBOARD -> MEMO -> VISUALIZZA ASSEGNATARIO
// Don't use double underline in constant names
// translate each expression separately at messages.it.yml
// Add __disabled suffix to make permission disabled and checked by default
const FILE_VISUALIZZA = 'PRATICA__DASHBOARD_FILE_VISUALIZZA';
const FILE_CREA = 'PRATICA__DASHBOARD_FILE_CREA';
const FILE_MODIFICA = 'PRATICA__DASHBOARD_FILE_MODIFICA';
const FILE_CANCELLA = 'PRATICA__DASHBOARD_FILE_CANCELLA';
const SCADENZA_VISUALIZZA_TUTTI = 'PRATICA__DASHBOARD_SCADENZA_VISUALIZZA__TUTTI__DISABLED';
const SCADENZA_CREA = 'PRATICA__DASHBOARD_SCADENZA_CREA';
const SCADENZA_MODIFICA = 'PRATICA__DASHBOARD_SCADENZA_MODIFICA';
const SCADENZA_CANCELLA = 'PRATICA__DASHBOARD_SCADENZA_CANCELLA';
/*const PLAN_VISUALIZZA_ORGANIZZATORE = 'PRATICA__DASHBOARD_PLAN_VISUALIZZA__ORGANIZZATORE__DISABLED';
const PLAN_VISUALIZZA_TUTTI = 'PRATICA__DASHBOARD_PLAN_VISUALIZZA__TUTTI';
const PLAN_CREA = 'PRATICA__DASHBOARD_PLAN_CREA';
const PLAN_MODIFICA = 'PRATICA__DASHBOARD_PLAN_MODIFICA';
const PLAN_CANCELLA = 'PRATICA__DASHBOARD_PLAN_CANCELLA';*/
const INOUT_ACCESSO_ALLA_SEZIONE = 'PRATICA__DASHBOARD_INOUT_ACCESSO__ALLA__SEZIONE';
const SPESE_ACCESSO_ALLA_SEZIONE = 'PRATICA__DASHBOARD_SPESE_ACCESSO__ALLA__SEZIONE';
const FATTURE_ACCESSO_ALLA_SEZIONE = 'PRATICA__DASHBOARD_FATTURE_ACCESSO__ALLA__SEZIONE';
const COPIE_VERBALE_VISUALIZZA = 'PRATICA__DASHBOARD_COPIE__VERBALE_VISUALIZZA__DISABLED';
const ORDER = 11;
const PERMISSIONS_LIST = [
self::FILE_VISUALIZZA,
self::FILE_CREA,
self::FILE_MODIFICA,
self::FILE_CANCELLA,
self::SCADENZA_CREA,
self::SCADENZA_MODIFICA,
self::SCADENZA_CANCELLA,
self::SCADENZA_VISUALIZZA_TUTTI,
/*self::PLAN_VISUALIZZA_ORGANIZZATORE,
self::PLAN_VISUALIZZA_TUTTI,
self::PLAN_CREA,
self::PLAN_MODIFICA,
self::PLAN_CANCELLA,*/
self::INOUT_ACCESSO_ALLA_SEZIONE,
self::SPESE_ACCESSO_ALLA_SEZIONE,
self::FATTURE_ACCESSO_ALLA_SEZIONE,
self::COPIE_VERBALE_VISUALIZZA,
];
private $security;
public function __construct(Security $security)
{
$this->security = $security;
}
protected function supports($attribute, $subject)
{
// if the attribute isn't one we support, return false
if (!in_array($attribute, self::PERMISSIONS_LIST)) {
return false;
}
return true;
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
$user = $token->getUser();
// if the user is anonymous, do not grant access
if (!$user instanceof UserInterface) {
return false;
}
if($this->security->isGranted(User::ROLE_SUPER_ADMIN)) return true;
return in_array($attribute, $user->getPermissions());
}
}