custom/plugins/NetiNextAdminTools/src/Subscriber/ApiSubscriber.php line 43

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace NetInventors\NetiNextAdminTools\Subscriber;
  4. use League\OAuth2\Server\Exception\OAuthServerException;
  5. use NetInventors\NetiNextAdminTools\Services\FilterCheck;
  6. use NetInventors\NetiNextAdminTools\Services\FilterCriteriaBuilder;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntitySearchedEvent;
  8. use Shopware\Core\PlatformRequest;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. class ApiSubscriber implements EventSubscriberInterface
  13. {
  14.     public const ENTITY_NAME 'neti_admin_tools_filter';
  15.     private FilterCriteriaBuilder $filterCriteriaBuilder;
  16.     private FilterCheck           $filterCheck;
  17.     public function __construct(
  18.         FilterCriteriaBuilder $filterCriteriaBuilder,
  19.         FilterCheck $filterCheck
  20.     ) {
  21.         $this->filterCriteriaBuilder $filterCriteriaBuilder;
  22.         $this->filterCheck           $filterCheck;
  23.     }
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             EntitySearchedEvent::class => 'onEntitySearched',
  28.             KernelEvents::CONTROLLER   => [ 'onKernelController', -100 ],
  29.         ];
  30.     }
  31.     /**
  32.      * @throws OAuthServerException
  33.      */
  34.     public function onEntitySearched(EntitySearchedEvent $event): void
  35.     {
  36.         if (static::ENTITY_NAME !== $event->getDefinition()->getEntityName()) {
  37.             return;
  38.         }
  39.         $this->filterCriteriaBuilder->buildConditions(
  40.             $event->getCriteria(),
  41.             $event->getContext()
  42.         );
  43.     }
  44.     public function onKernelController(ControllerEvent $event)
  45.     {
  46.         $request     $event->getRequest();
  47.         $route       $request->get('_route');
  48.         $id          $request->get('id');
  49.         $updateRoute \sprintf('api.%s.update', static::ENTITY_NAME);
  50.         $deleteRoute \sprintf('api.%s.delete', static::ENTITY_NAME);
  51.         if (null === $id) {
  52.             return;
  53.         }
  54.         if ($route !== $updateRoute && $route !== $deleteRoute) {
  55.             return;
  56.         }
  57.         $this->filterCheck->checkUserForFilter(
  58.             $id,
  59.             $request->attributes->get(PlatformRequest::ATTRIBUTE_CONTEXT_OBJECT)
  60.         );
  61.     }
  62. }