<?php
namespace ApiBundle\Security\Voter;
use CoreBundle\Entity\Common\MmppUserInterface;
use CoreBundle\Entity\Secteur;
use CoreBundle\Entity\Student;
use CoreBundle\Entity\Tutor;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class SecteurVoter extends Voter
{
protected function supports(string $attribute, $subject)
{
if (!$subject instanceof Secteur) {
return false;
}
return true;
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token)
{
$user = $token->getUser();
if (!$user instanceof MmppUserInterface) {
// the user must be logged in; if not, deny access
return false;
}
/** @var Secteur $secteur */
$secteur = $subject;
if ($user->getAdmin()) {
return true;
}
if (!$secteur->getActive()) {
return false;
}
if (($user instanceof Tutor) && !$user->getAdmin()) {
if (!$user->getSecteurs()->contains($secteur)) {
return false;
}
}
if ($user instanceof Student) {
if (!in_array($secteur, $user->getSecteurs())) {
return false;
}
}
return true;
}
}