<?php
namespace App\Security\Voter;
use App\Entity\Users\Child as Student;
use App\Entity\Users\StudentsParents;
use App\Entity\Users\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class SwitchToCustomerVoter extends Voter
{
private $security;
private $request;
private $entityManager;
public function __construct(Security $security,RequestStack $requestStack,EntityManagerInterface $entityManager)
{
$this->security = $security;
$this->request = $requestStack;
$this->entityManager = $entityManager;
}
/**
* @inheritDoc
*/
protected function supports(string $attribute, $subject)
{
// TODO: Implement supports() method.
return in_array($attribute, ['ROLE_SWITCH_USER','ROLE_ADMIN']) && $subject instanceof UserInterface;
}
/**
* @inheritDoc
*/
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token)
{
$target = $this->request->getCurrentRequest()->get('_switch_user');
$user = $this->security->getToken()->getUser();
$targetEntity = $this->entityManager->getRepository(User::class)->findOneByUsername($target);
$val = -1;
if(in_array('ROLE_ADMIN',$user->getRoles())){
return true;
}
if(/*in_array('ROLE_STUDENT',$user->getRoles()) ||*/ in_array('ROLE_PARENTS',$user->getRoles()) ){
/* if(in_array('ROLE_STUDENT',$user->getRoles())){
$val = $this->entityManager->getRepository(StudentsParents::class)->toSwitchUserStudent($user,$targetEntity);
}*/
if(in_array('ROLE_PARENTS',$user->getRoles())){
if($user->getId()==$targetEntity->getId()){
return true;
}
$val = $this->entityManager->getRepository(StudentsParents::class)->toSwitchUserParents($user,$targetEntity);
}
}
return 0 < $val;
// TODO: Implement voteOnAttribute() method.
}
}