src/EventListener/PermissionListener.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\HttpFoundation\Response;
  4. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  5. use Symfony\Component\HttpFoundation\RedirectResponse;
  6. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  7. use Symfony\Component\Security\Core\Security;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Doctrine\Common\Persistence\ManagerRegistry;
  10. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  11. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  12. use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
  13. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  14. use Symfony\Component\Serializer\Serializer;
  15. use App\Entity\Operation;
  16. use App\Entity\Permission;
  17. use App\Entity\User;
  18. class PermissionListener
  19. {
  20.     private $router;
  21.     private $security;
  22.     private $em;
  23.     private $tokenStorage;
  24.     public function __construct(UrlGeneratorInterface $routerSecurity $securityEntityManagerInterface $emManagerRegistry $managerTokenStorageInterface $tokenStorage)
  25.     {
  26.         $this->router $router;
  27.         $this->security $security;
  28.         $this->em $em;
  29.         $this->tokenStorage $tokenStorage;
  30.     }
  31.     public function onKernelController(ControllerEvent $event)
  32.     {
  33.         if ($this->tokenStorage->getToken() == null) return;
  34.         $hasAccess $this->security->isGranted('ROLE_ADMIN');
  35.         if (!$hasAccess) return;
  36.         $controller $event->getController();
  37.         if(!is_array($controller)) return;
  38.         if (strpos($event->getRequest()->getRequestUri(), $event->getRequest()->getBaseUrl().'/admin') === false) return;
  39.         $encoder = new JsonEncoder();
  40.         $defaultContext = [
  41.             AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object$format$context) {
  42.                 return $object->getId();
  43.             },
  44.         ];
  45.         $normalizer = new ObjectNormalizer(nullnullnullnullnullnull$defaultContext);
  46.         $serializer = new Serializer([$normalizer], [$encoder]);
  47.         $user $this->security->getUser();
  48.         $request $event->getRequest();
  49.         $method $request->getMethod();
  50.         $action '';
  51.         $code '';
  52.         $area '';
  53.         $description '';
  54.         if ($user->getSessionId() != $request->getSession()->getId()) {
  55.             $event->setController(function() {
  56.                 $logout $this->router->generate('admin_logout');
  57.                 return new RedirectResponse($logout);
  58.             });
  59.         }
  60.         $params $event->getRequest()->get('_route_params');
  61.         foreach ($params as $key => $value) {
  62.             if ($key == 'id'){
  63.                 $code $value;
  64.             }
  65.         }
  66.         $hasAccess false;
  67.         if ($controller[0] instanceof \App\Controller\ApiController){
  68.             $hasAccess true;
  69.             $action 'API';
  70.         }
  71.         if ($controller[0] instanceof \App\Controller\AdminController){
  72.             if ($controller[1] == 'admin') { $area 'Dashboard'$hasAccess true$action 'Visualizar'; }
  73.             if ($controller[1] == 'coupon') { $area 'Dashboard'$hasAccess true$action 'Visualizar'; }
  74.             if ($controller[1] == 'installation') { $area 'Dashboard'$hasAccess true$action 'Visualizar'; }
  75.         }
  76.         //if ($controller[0] instanceof \App\Controller\ProfessionalController){ $area = 'Produtos - Profissionais'; }
  77.         if ($controller[0] instanceof \App\Controller\CategoryController){ $area 'Cadastros - Categorias'; }
  78.         if ($controller[0] instanceof \App\Controller\CompanyController){ $area 'Cadastros - Empresas'; }
  79.         if ($controller[0] instanceof \App\Controller\PromotionController){ $area 'Cadastros - Promoções'; }
  80.         if ($controller[0] instanceof \App\Controller\PlanController){ $area 'Cadastros - Planos'; }
  81.         if ($controller[0] instanceof \App\Controller\InstallationController){ $area 'Aplicativo - Instalações'; }
  82.         if ($controller[0] instanceof \App\Controller\PushController){ $area 'Aplicativo - Pushes'; }
  83.         if ($controller[0] instanceof \App\Controller\SubscriptionController){ $area 'Operacional - Assinaturas'; }
  84.         if ($controller[0] instanceof \App\Controller\AffiliatedController){ $area 'Operacional - Afiliados'; }
  85.         if ($controller[0] instanceof \App\Controller\CouponController){ $area 'Operacional - Cupons'; }
  86.         if ($controller[0] instanceof \App\Controller\QrcodeController){ $area 'Operacional - Qrcodes'; }
  87.         if ($controller[0] instanceof \App\Controller\AdministratorController){ $area 'Usuários - Administradores'; }
  88.         if ($controller[0] instanceof \App\Controller\PermissionController){ $area 'Usuários - Permissões'; }
  89.         if ($controller[0] instanceof \App\Controller\ClientController){ $area 'Usuários - Clientes'; }
  90.         if ($controller[0] instanceof \App\Controller\PartnerController){ $area 'Usuários - Parceiros'; }
  91.         if ($controller[0] instanceof \App\Controller\CategoryEntryController){ $area 'Financeiro - Categorias'; }
  92.         if ($controller[0] instanceof \App\Controller\EntryController){ $area 'Financeiro - Lançamentos'; }
  93.         if ($controller[0] instanceof \App\Controller\ConfigurationController){ $area 'Website - Configurações'; }
  94.         if ($controller[0] instanceof \App\Controller\SlideController){ $area 'Website - Slides'; }
  95.         if ($controller[0] instanceof \App\Controller\AdvantageController){ $area 'Website - Vantagens'; }
  96.         if ($controller[0] instanceof \App\Controller\HowItWorkController){ $area 'Website - Como funciona'; }
  97.         if ($controller[0] instanceof \App\Controller\FaqController){ $area 'Website - Perguntas Frequentes'; }
  98.         if ($controller[0] instanceof \App\Controller\ScreenController){ $area 'Website - Interfaces do app'; }
  99.         if ($controller[0] instanceof \App\Controller\HiringController){ $area 'Website - Trabalhe conosco'; }
  100.         if ($controller[0] instanceof \App\Controller\ContactController){ $area 'Website - Contatos'; }
  101.         if ($controller[0] instanceof \App\Controller\OperationController){ $area 'Auditoria - Administração'; }
  102.         //if ($controller[0] instanceof \App\Controller\OperationAppController){ $area = 'Auditoria - Aplicativo'; }
  103.         /*if ($controller[0] instanceof \App\GatewayBundle\Controller\AdminController){
  104.             if ($controller[1] == 'info') { $area = 'Financeiro - Informações'; }
  105.             if ($controller[1] == 'saque') { $area = 'Financeiro - Saques'; }
  106.             if ($controller[1] == 'antecipacao') { $area = 'Financeiro - Antecipação'; }
  107.             if ($controller[1] == 'refund') { $area = 'Financeiro - Estorno'; }
  108.         }*/
  109.         $permission $this->em->getRepository(Permission::class)->findOneBy(
  110.             array('area' => $area'user' => $user),array(),null,null
  111.         );
  112.         if ( ($controller[1] == 'dashboad') && ($method == 'GET') ) {
  113.             $action 'Visualizar';
  114.             if ( ($permission) && ($permission->getView() == true) ) {
  115.                 $hasAccess true;
  116.                 $description 'Visualizou a tela de dashboard.';
  117.             }
  118.         }
  119.         if ( ($controller[1] == 'calendar') && ($method == 'GET') ) {
  120.             $action 'Visualizar';
  121.             if ( ($permission) && ($permission->getView() == true) ) {
  122.                 $hasAccess true;
  123.                 $description 'Visualizou a tela de calendário.';
  124.             }
  125.         }
  126.         if ( ($controller[1] == 'info') && ($method == 'GET') ) {
  127.             $action 'Visualizar';
  128.             if ( ($permission) && ($permission->getView() == true) ) {
  129.                 $hasAccess true;
  130.                 $description 'Visualizou a tela de informações do financeiro.';
  131.             }
  132.         }
  133.         if ( ($controller[1] == 'info') && ($method == 'POST') ) {
  134.             $action 'Visualizar';
  135.             if ( ($permission) && ($permission->getView() == true) ) {
  136.                 $hasAccess true;
  137.                 $description 'Solicitou um saque.';
  138.             }
  139.         }
  140.         if ( ($controller[1] == 'saque') && ($method == 'GET') ) {
  141.             $action 'Visualizar';
  142.             if ( ($permission) && ($permission->getView() == true) ) {
  143.                 $hasAccess true;
  144.                 $description 'Visualizou a tela de saques do financeiro.';
  145.             }
  146.         }
  147.         if ( ($controller[1] == 'antecipacao') && ($method == 'GET') ) {
  148.             $action 'Visualizar';
  149.             if ( ($permission) && ($permission->getView() == true) ) {
  150.                 $hasAccess true;
  151.                 $description 'Visualizou a tela de antecipações do financeiro.';
  152.             }
  153.         }
  154.         if ( ($controller[1] == 'refund') && ($method == 'GET') ) {
  155.             $action 'Visualizar';
  156.             if ( ($permission) && ($permission->getView() == true) ) {
  157.                 $hasAccess true;
  158.                 $description 'Solicitou um estorno no financeiro.';
  159.             }
  160.         }
  161.         if ( ($controller[1] == 'administration') && ($method == 'GET') ) {
  162.             $action 'Listar';
  163.             if ( ($permission) && ($permission->getList() == true) ) {
  164.                 $hasAccess true;
  165.                 $description 'Visualizou a tela de listagem.';
  166.             }
  167.         }
  168.         if ( ($controller[1] == 'application') && ($method == 'GET') ) {
  169.             $action 'Listar';
  170.             if ( ($permission) && ($permission->getList() == true) ) {
  171.                 $hasAccess true;
  172.                 $description 'Visualizou a tela de listagem.';
  173.             }
  174.         }
  175.         if ( ($controller[1] == 'administration') && ($method == 'POST') ) {
  176.             $action 'Filtrar';
  177.             if ( ($permission) && ($permission->getFilter() == true) ) {
  178.                 $hasAccess true;
  179.             }
  180.             $filters $event->getRequest()->request->all();
  181.             $description 'Solicitação de filtragem realizada. Critérios: ';
  182.             if ($filters != null) {
  183.                 $value $serializer->serialize($filters'json');
  184.                 $description $description ' :: ' $value;
  185.                 /*foreach ($filters as $filter) {
  186.                     foreach ($filter as $key => $value) {
  187.                         if (($key != '_token') && ($value != null)) {
  188.                             $value = $serializer->serialize($value, 'json');
  189.                             $description = $description . ' ' . $key . ' => ' . $value . ' :: ';
  190.                         }
  191.                     }
  192.                 }*/
  193.             }
  194.         }
  195.         if ( ($controller[1] == 'application') && ($method == 'POST') ) {
  196.             $action 'Filtrar';
  197.             if ( ($permission) && ($permission->getFilter() == true) ) {
  198.                 $hasAccess true;
  199.             }
  200.             $filters $event->getRequest()->request->all();
  201.             $description 'Solicitação de filtragem realizada. Critérios: ';
  202.             if ($filters != null) {
  203.                 $value $serializer->serialize($filters'json');
  204.                 $description $description ' :: ' $value;
  205.                 /*foreach ($filters as $filter) {
  206.                     foreach ($filter as $key => $value) {
  207.                         if (($key != '_token') && ($value != null)) {
  208.                             $value = $serializer->serialize($value, 'json');
  209.                             $description = $description . ' ' . $key . ' => ' . $value . ' :: ';
  210.                         }
  211.                     }
  212.                 }*/
  213.             }
  214.         }
  215.         if ( ( ($controller[1] == 'stepData') || ($controller[1] == 'stepService') || ($controller[1] == 'stepUser') || ($controller[1] == 'stepCheckout') || ($controller[1] == 'stepPayment') ) && ($method == 'GET') ) {
  216.             $action 'Incluir';
  217.             if ( ($permission) && ($permission->getInclude() == true) ) {
  218.                 $hasAccess true;
  219.                 $description 'Tela de inclusão de registro acessada.';
  220.             }
  221.         }
  222.         if ( ( ($controller[1] == 'stepData') || ($controller[1] == 'stepService') || ($controller[1] == 'stepUser') || ($controller[1] == 'stepCheckout') || ($controller[1] == 'stepPayment') ) && ($method == 'POST') ) {
  223.             $action 'Incluir';
  224.             if ( ($permission) && ($permission->getInclude() == true) ) {
  225.                 $hasAccess true;
  226.             }
  227.             $forms $event->getRequest()->request->all();
  228.             $description 'Solicitação de inclusão realizada. Critérios: ';
  229.             if ($forms != null) {
  230.                 $value $serializer->serialize($forms'json');
  231.                 $description $description ' :: ' $value;
  232.                 /*foreach ($forms as $form) {
  233.                     foreach ($form as $key => $value) {
  234.                         if ($key != '_token') {
  235.                             $value = $serializer->serialize($value, 'json');
  236.                             $description = $description . ' ' . $key . ' => ' . $value . ' :: ';
  237.                         }
  238.                     }
  239.                 }*/
  240.             }
  241.         }
  242.         if ( ($controller[1] == 'deleteService') && ($method == 'GET') ) {
  243.             $action 'Incluir';
  244.             if ( ($permission) && ($permission->getInclude() == true) ) {
  245.                 $hasAccess true;
  246.                 $description 'Tela de exclusão de registro acessada.';
  247.             }
  248.         }
  249.         if ( ($controller[1] == 'index') && ($method == 'GET') ) {
  250.             $action 'Listar';
  251.             if ( ($permission) && ($permission->getList() == true) ) {
  252.                 $hasAccess true;
  253.                 $description 'Visualizou a tela de listagem.';
  254.             }
  255.         }
  256.         if ( ($controller[1] == 'index') && ($method == 'POST') ) {
  257.             $action 'Filtrar';
  258.             if ( ($permission) && ($permission->getFilter() == true) ) {
  259.                 $hasAccess true;
  260.             }
  261.             $filters $event->getRequest()->request->all();
  262.             $description 'Solicitação de filtragem realizada. Critérios: ';
  263.             if ($filters != null) {
  264.                 $value $serializer->serialize($filters'json');
  265.                 $description $description ' :: ' $value;
  266.                 /*foreach ($filters as $filter) {
  267.                     foreach ($filter as $key => $value) {
  268.                         if (($key != '_token') && ($value != null)) {
  269.                             $value = $serializer->serialize($value, 'json');
  270.                             $description = $description . ' ' . $key . ' => ' . $value . ' :: ';
  271.                         }
  272.                     }
  273.                 }*/
  274.             }
  275.         }
  276.         if ( ($controller[1] == 'new') && ($method == 'GET') ) {
  277.             $action 'Incluir';
  278.             if ( ($permission) && ($permission->getInclude() == true) ) {
  279.                 $hasAccess true;
  280.                 $description 'Tela de inclusão de registro acessada.';
  281.             }
  282.         }
  283.         if ( ($controller[1] == 'new') && ($method == 'POST') ) {
  284.             $action 'Incluir';
  285.             if ( ($permission) && ($permission->getInclude() == true) ) {
  286.                 $hasAccess true;
  287.             }
  288.             $forms $event->getRequest()->request->all();
  289.             $description 'Solicitação de inclusão realizada. Critérios: ';
  290.             if ($forms != null) {
  291.                 $value $serializer->serialize($forms'json');
  292.                 $description $description ' :: ' $value;
  293.                 /*foreach ($forms as $form) {
  294.                     foreach ($form as $key => $value) {
  295.                         if ($key != '_token') {
  296.                             $value = $serializer->serialize($value, 'json');
  297.                             $description = $description . ' ' . $key . ' => ' . $value . ' :: ';
  298.                         }
  299.                     }
  300.                 }*/
  301.             }
  302.         }
  303.         if ( ($controller[1] == 'show') && ($method == 'GET') ) {
  304.             $action 'Visualizar';
  305.             if ( ($permission) && ($permission->getView() == true) ) {
  306.                 $hasAccess true;
  307.                 $description 'Tela de visualização de registro acessada.';
  308.             }
  309.         }
  310.         if ( ($controller[1] == 'edit') && ($method == 'GET') ) {
  311.             $action 'Alterar';
  312.             if ( ($permission) && ($permission->getModify() == true) ) {
  313.                 $hasAccess true;
  314.                 $description 'Tela de alteração de registro acessada.';
  315.             }
  316.         }
  317.         if ( ($controller[1] == 'edit') && ($method == 'POST') ) {
  318.             $action 'Alterar';
  319.             if ( ($permission) && ($permission->getModify() == true) ) {
  320.                 $hasAccess true;
  321.             }
  322.             $forms $event->getRequest()->request->all();
  323.             $description 'Solicitação de alteração realizada. Critérios: ';
  324.             if ($forms != null) {
  325.                 $value $serializer->serialize($forms'json');
  326.                 $description $description ' :: ' $value;
  327.                 /*foreach ($forms as $form) {
  328.                     foreach ($form as $key => $value) {
  329.                         if ($key != '_token') {
  330.                             $value = $serializer->serialize($value, 'json');
  331.                             $description = $description . ' ' . $key . ' => ' . $value . ' :: ';
  332.                         }
  333.                     }
  334.                 }*/
  335.             }
  336.         }
  337.         if ( ($controller[1] == 'delete') && ($method == 'DELETE') ) {
  338.             $action 'Apagar';
  339.             if ( ($permission) && ($permission->getErase() == true) ) {
  340.                 $hasAccess true;
  341.                 $description 'Solicitação de exclusão de registro realizada.';
  342.             }
  343.         }
  344.         if ( ($controller[1] == 'report') && ($method == 'POST') ) {
  345.             $action 'Imprimir';
  346.             if ( ($permission) && ($permission->getPrint() == true) ) {
  347.                 $hasAccess true;
  348.                 $description 'Solicitação de impressão de listagem realizada.';
  349.             }
  350.         }
  351.         if ( ($controller[1] == 'multiple') && ($method == 'GET') ) {
  352.             $action 'Incluir';
  353.             if ( ($permission) && ($permission->getInclude() == true) ) {
  354.                 $hasAccess true;
  355.                 $description 'Tela de inclusão de múltiplos registros acessada.';
  356.             }
  357.         }
  358.         if ( ($controller[1] == 'multiple') && ($method == 'POST') ) {
  359.             $action 'Incluir';
  360.             if ( ($permission) && ($permission->getInclude() == true) ) {
  361.                 $hasAccess true;
  362.             }
  363.             $forms $event->getRequest()->request->all();
  364.             $description 'Solicitação de inclusão realizada. Critérios: ';
  365.             if ($forms != null) {
  366.                 $value $serializer->serialize($forms'json');
  367.                 $description $description ' :: ' $value;
  368.                 /*foreach ($forms as $form) {
  369.                     foreach ($form as $key => $value) {
  370.                         if ($key != '_token') {
  371.                             $value = $serializer->serialize($value, 'json');
  372.                             $description = $description . ' ' . $key . ' => ' . $value . ' :: ';
  373.                         }
  374.                     }
  375.                 }*/
  376.             }
  377.         }
  378.         if ( ($controller[1] == 'removeImage') && (($method == 'GET') || ($method == 'POST')) ) {
  379.             $action 'Alterar';
  380.             if ( ($permission) && ($permission->getModify() == true) ) {
  381.                 $hasAccess true;
  382.             }
  383.             $forms $event->getRequest()->request->all();
  384.             $description 'Solicitação de alteração realizada. Critérios: ';
  385.             if ($forms != null) {
  386.                 $value $serializer->serialize($forms'json');
  387.                 $description $description ' :: ' $value;
  388.                 /*foreach ($forms as $form) {
  389.                     foreach ($form as $key => $value) {
  390.                         if ($key != '_token') {
  391.                             $value = $serializer->serialize($value, 'json');
  392.                             $description = $description . ' ' . $key . ' => ' . $value . ' :: ';
  393.                         }
  394.                     }
  395.                 }*/
  396.             }
  397.         }
  398.         if (!$hasAccess) {
  399.             $session $event->getRequest()->getSession();
  400.             $session->getFlashBag()->add('accessForbiden'"Você não tem permissão para acessar a página solicitada: " $area ". Entre em contato com seu administrador.");
  401.             $event->setController(function() {
  402.                 $alertsPage $this->router->generate('admin_dashboard_coupon');
  403.                 return new RedirectResponse($alertsPage);
  404.             });
  405.             $description 'Tentativa de acesso proibido. ' $description;
  406.             $operation = new Operation();
  407.             $operation->setDate(new \DateTime('now', new \DateTimeZone('America/Fortaleza')));
  408.             $operation->setUser($user->getName() . ' - ' $user->getEmail());
  409.             $operation->setUserId($user->getId());
  410.             $operation->setAction($action);
  411.             $operation->setEntity($area);
  412.             $operation->setEntityId($code);
  413.             $operation->setDescription($description);
  414.             $this->em->persist($operation);
  415.             $this->em->flush();
  416.         } else {
  417.             $operation = new Operation();
  418.             $operation->setDate(new \DateTime('now', new \DateTimeZone('America/Fortaleza')));
  419.             $operation->setUser($user->getName() . ' - ' $user->getEmail());
  420.             $operation->setUserId($user->getId());
  421.             $operation->setAction($action);
  422.             $operation->setEntity($area);
  423.             $operation->setEntityId($code);
  424.             $operation->setDescription($description);
  425.             $this->em->persist($operation);
  426.             $this->em->flush();
  427.             return;
  428.         }
  429.     }
  430. }