<?php
namespace App\EventSubscriber;
use App\Entity\FcmFoodSisetuGroup;
use App\Entity\SfGuardUser;
use Doctrine\ORM\EntityManager;
use Doctrine\Persistence\ManagerRegistry;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
/**
* 食事システム用サブスクライバー
*
* adminの場合は全グループを返す
*
*
*/
class SecuritySubscriber implements EventSubscriberInterface
{
private $manager;
private $token;
private $logger;
private $checker;
public function __construct(
ManagerRegistry $mr,
TokenStorageInterface $token,
AuthorizationCheckerInterface $checker,
LoggerInterface $logger)
{
$this->manager = $mr;
$this->token = $token;
$this->logger = $logger;
$this->checker = $checker;
}
public function onKernelController(ControllerEvent $event)
{
if($this->token->getToken() === null)
{
return;
}
$user = $this->token->getToken()->getUser();
if(!$user instanceof SfGuardUser)
{
return;
}
/** @var EntityManager $em */
if(!$this->checker->isGranted('ROLE_ADMIN'))
{
return;
}
$this->logger->info("admin用にグループ付与処理開始");
//TODO 全グループを取得
$em = $this->manager->getManagerForClass(FcmFoodSisetuGroup::class);
SfGuardUser::$foodSisetuGroups = $em->getRepository(FcmFoodSisetuGroup::class)->findAll();
}
public static function getSubscribedEvents()
{
return [
KernelEvents::CONTROLLER => 'onKernelController',
];
}
}