<?php
namespace App\ProPneu\Service\MetierManagerBundle\EventListener;
use App\ProPneu\Service\MetierManagerBundle\Utils\EntityName;
use App\ProPneu\Service\MetierManagerBundle\Utils\RoleName;
use App\ProPneu\Service\MetierManagerBundle\Utils\ServiceName;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\RouterInterface;
class PpCheckRoleListener
{
private $_router;
private $_container;
/**
* RequestListener constructor.
* @param RouterInterface $_router
* @param Container $_container
*/
public function __construct(RouterInterface $_router, Container $_container)
{
$this->_router = $_router;
$this->_container = $_container;
}
/**
* @param GetResponseEvent $_event
*/
public function onRequest(GetResponseEvent $_event)
{
$_utils_manager = $this->_container->get(ServiceName::SRV_METIER_UTILS);
$_user_role_manager = $this->_container->get(ServiceName::SRV_METIER_ROLE);
$_user_connected = $_utils_manager->getUserConnected();
$_current_route = $_event->getRequest()->get('_route');
$_current_url = $_event->getRequest()->getUri();
$_context = $this->_router->getContext();
$_branche_paramater = $_event->getRequest()->get('_branche');
$_branche_name = $_utils_manager->findOneEntityByFilter(EntityName::PP_BRANCHE, [
'brcLibelle' => $_branche_paramater
]);
if (!$_user_connected && strpos($_current_url, 'admin') !== false) {
$_response = new RedirectResponse($this->_router->generate('eternaly_login'));
$_event->setResponse($_response);
}
if('liip_imagine_filter' === $_current_route) {
return;
}
if ('dashboard_index' === $_current_route) {
return;
}
if ('home_index' === $_current_route) {
return;
}
if (is_null($_current_route)) {
return;
}
if ($_event->getRequest()->isXmlHttpRequest()) {
$_context->setParameter('_branche', $_branche_name ? $_branche_name->getBrcLibelle() : 'speed_service');
return;
}
if (is_object($_user_connected)) {
$_user_role_id = $_user_connected->getPpUserRole() ? $_user_connected->getPpUserRole()->getId() : 0;
if (!in_array($_user_role_id, [RoleName::ID_ROLE_SUPERADMIN, RoleName::ID_ROLE_ADMIN])) {
$_has_autorization = $_user_role_manager->checkAutorisation($_current_route, $_user_role_id);
if (!$_has_autorization) {
$_utils_manager->setFlash('error', 'Accès non autorisé');
$_response = new RedirectResponse($this->_router->generate('dashboard_index', [
'_branche' => $_branche_name ? $_branche_name->getBrcLibelle() : 'speed_service'
]));
$_event->setResponse($_response);
}
}
}
if ($_current_route == 'fos_user_security_login') {
throw new NotFoundHttpException('404 not found');
}
}
}