vendor/pimcore/pimcore/bundles/AdminBundle/EventListener/UserPerspectiveListener.php line 57

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  * @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  * @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace Pimcore\Bundle\AdminBundle\EventListener;
  15. use Pimcore\Bundle\AdminBundle\Security\User\TokenStorageUserResolver;
  16. use Pimcore\Bundle\CoreBundle\EventListener\Traits\PimcoreContextAwareTrait;
  17. use Pimcore\Config;
  18. use Pimcore\Http\Request\Resolver\PimcoreContextResolver;
  19. use Pimcore\Model\User;
  20. use Psr\Log\LoggerAwareInterface;
  21. use Psr\Log\LoggerAwareTrait;
  22. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  25. use Symfony\Component\HttpKernel\KernelEvents;
  26. class UserPerspectiveListener implements EventSubscriberInterfaceLoggerAwareInterface
  27. {
  28.     use LoggerAwareTrait;
  29.     use PimcoreContextAwareTrait;
  30.     /**
  31.      * @var TokenStorageUserResolver
  32.      */
  33.     protected $userResolver;
  34.     /**
  35.      * @param TokenStorageUserResolver $userResolver
  36.      */
  37.     public function __construct(TokenStorageUserResolver $userResolver)
  38.     {
  39.         $this->userResolver $userResolver;
  40.     }
  41.     /**
  42.      * @inheritDoc
  43.      */
  44.     public static function getSubscribedEvents()
  45.     {
  46.         return [
  47.             KernelEvents::REQUEST => 'onKernelRequest'
  48.         ];
  49.     }
  50.     public function onKernelRequest(GetResponseEvent $event)
  51.     {
  52.         $request $event->getRequest();
  53.         if (!$event->isMasterRequest()) {
  54.             return;
  55.         }
  56.         if (!$this->matchesPimcoreContext($requestPimcoreContextResolver::CONTEXT_ADMIN)) {
  57.             return;
  58.         }
  59.         if ($user $this->userResolver->getUser()) {
  60.             $this->setRequestedPerspective($user$request);
  61.         }
  62.     }
  63.     /**
  64.      * @param User $user
  65.      * @param Request $request
  66.      */
  67.     protected function setRequestedPerspective(User $userRequest $request)
  68.     {
  69.         // update perspective settings
  70.         $requestedPerspective $request->get('perspective');
  71.         if ($requestedPerspective) {
  72.             if ($requestedPerspective !== $user->getActivePerspective()) {
  73.                 $existingPerspectives array_keys(Config::getPerspectivesConfig()->toArray());
  74.                 if (!in_array($requestedPerspective$existingPerspectives)) {
  75.                     $this->logger->warning('Requested perspective {perspective} for {user} is not does not exist.', [
  76.                         'user' => $user->getName(),
  77.                         'perspective' => $requestedPerspective
  78.                     ]);
  79.                     $requestedPerspective null;
  80.                 }
  81.             }
  82.         }
  83.         if (!$requestedPerspective || !$user->isAllowed($requestedPerspective'perspective')) {
  84.             $previouslyRequested $requestedPerspective;
  85.             // choose active perspective or a first allowed
  86.             $requestedPerspective $user->isAllowed($user->getActivePerspective(), 'perspective')
  87.                 ? $user->getActivePerspective()
  88.                 : $user->getFirstAllowedPerspective();
  89.             if (null !== $previouslyRequested) {
  90.                 $this->logger->warning('User {user} is not allowed requested perspective {requestedPerspective}. Falling back to {perspective}.', [
  91.                     'user' => $user->getName(),
  92.                     'requestedPerspective' => $previouslyRequested,
  93.                     'perspective' => $requestedPerspective
  94.                 ]);
  95.             } else {
  96.                 $this->logger->debug('Perspective for user {user} was not requested. Falling back to {perspective}.', [
  97.                     'user' => $user->getName(),
  98.                     'perspective' => $requestedPerspective
  99.                 ]);
  100.             }
  101.         }
  102.         if ($requestedPerspective !== $user->getActivePerspective()) {
  103.             $this->logger->info('Setting active perspective for user {user} to {perspective}.', [
  104.                 'user' => $user->getName(),
  105.                 'perspective' => $requestedPerspective
  106.             ]);
  107.             $user->setActivePerspective($requestedPerspective);
  108.             $user->save();
  109.         }
  110.     }
  111. }