<?php
namespace App\EventListener;
use App\Repository\System\accessRepository;
use App\Repository\System\categoriesRepository;
use App\Repository\System\permissionsRepository;
use App\Repository\System\rolesRepository;
use App\Repository\System\subCategoriesRepository;
use App\Repository\System\usersRolesRepository;
use App\Repository\UserRepository;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Security;
class AccessListener
{
const TAG_LOGIN = '/login';
public function __construct(RequestStack $requestStack,UrlGeneratorInterface $urlGenerator,Security $security, UserRepository $userRepository, rolesRepository $rolesRepository, usersRolesRepository $usersRolesRepository, accessRepository $accessRepository, permissionsRepository $permissionsRepository, categoriesRepository $categoriesRepository, subCategoriesRepository $subCategoriesRepository)
{
$this->userRepository = $userRepository;
$this->rolesRepository = $rolesRepository;
$this->accessRepository = $accessRepository;
$this->permissionsRepository = $permissionsRepository;
$this->usersRolesRepository = $usersRolesRepository;
$this->categoriesRepository = $categoriesRepository;
$this->subCategoriesRepository = $subCategoriesRepository;
$this->urlGenerator = $urlGenerator;
$this->security = $security;
$this->requestStack = $requestStack;
}
public function onKernelRequest(RequestEvent $event)
{
$uri = $this->requestStack->getCurrentRequest()->getRequestUri();
// if ($uri != self::TAG_LOGIN && $uri != "/")
// {
// $userRole = $this->usersRolesRepository->findOneBy(['users' => $this->getCurrentUser()]);
// if ($userRole == null) return $event->setResponse(new Response('', 403));
//
// $accesses = $userRole->getRoles()->getAccesses();
//
// foreach ($accesses as $access) {
// if ($access->getCategoriesId()->getLink() != '#')
// {
// $StorageCatURI = $this->urlGenerator->generate($access->getCategoriesId()->getLink());
// if ($uri == $StorageCatURI && $access->getAble() == false)
// {
// $event->setResponse(new Response('', 403));
// }
// }
// $permissions = $userRole->getRoles()->getPermissions();
//
// foreach ($permissions as $permission) {
// $subcat = $this->subCategoriesRepository->findOneBy(['id' => $permission->getSubCategories()->getId()]);
// if ($subcat->getLink() != '#')
// {
// $StorageSubCatURI = $this->urlGenerator->generate($subcat->getLink());
// if ($uri == $StorageSubCatURI && $permission->getAccess() == false)
// {
// $event->setResponse(new Response('', 403));
// }
// }
// }
// }
// }
}
public function getCurrentUser()
{
return $this->security->getUser();
}
}