vendor/pimcore/portal-engine/src/Service/Security/SecurityService.php line 46

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under following license:
  6.  * - Pimcore Commercial License (PCL)
  7.  *
  8.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  9.  *  @license    http://www.pimcore.org/license     PCL
  10.  */
  11. namespace Pimcore\Bundle\PortalEngineBundle\Service\Security;
  12. use Pimcore\Bundle\PortalEngineBundle\Model\DataObject\PortalUserInterface;
  13. use Pimcore\Model\DataObject\PortalUser;
  14. use Pimcore\Model\User;
  15. use Pimcore\Tool;
  16. use Pimcore\Tool\Session;
  17. use Symfony\Component\HttpFoundation\RequestStack;
  18. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  19. class SecurityService
  20. {
  21.     protected $tokenStorage;
  22.     /**
  23.      * @var PortalUserInterface|null
  24.      */
  25.     protected $portalUser;
  26.     /**
  27.      * @var RequestStack
  28.      */
  29.     protected $requestStack;
  30.     public function __construct(TokenStorageInterface $tokenStorageRequestStack $requestStack)
  31.     {
  32.         $this->tokenStorage $tokenStorage;
  33.         $this->requestStack $requestStack;
  34.     }
  35.     /**
  36.      * @return PortalUserInterface|null
  37.      */
  38.     public function getPortalUser(): ?PortalUserInterface
  39.     {
  40.         try {
  41.             if ($this->portalUser === null) {
  42.                 $this->portalUser $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
  43.                 if (!$this->portalUser instanceof PortalUserInterface) {
  44.                     $this->portalUser null;
  45.                 }
  46.             }
  47.         } catch (\Exception $e) {
  48.             $this->portalUser null;
  49.         }
  50.         if (empty($this->portalUser) && ($this->isAdminRestApiCall() || $this->isAdminPreviewCall())) {
  51.             return (new PortalUser())
  52.                 ->setAdmin(true);
  53.         }
  54.         return $this->portalUser;
  55.     }
  56.     /**
  57.      * @return User|null
  58.      */
  59.     public function getPimcoreUser()
  60.     {
  61.         /** @var User|mixed $pimcoreUser */
  62.         $pimcoreUser Session::get()->get('user');
  63.         return $pimcoreUser instanceof User
  64.             $pimcoreUser
  65.             null;
  66.     }
  67.     /**
  68.      * Can be used to force a portal user (i.e. in cli context)
  69.      *
  70.      * @param PortalUserInterface|null $portalUser
  71.      */
  72.     public function setPortalUser(?PortalUserInterface $portalUser): void
  73.     {
  74.         $this->portalUser $portalUser;
  75.     }
  76.     /**
  77.      * @return int
  78.      */
  79.     public function getPimcoreUserId(): int
  80.     {
  81.         if (!$portalUser $this->getPortalUser()) {
  82.             return 0;
  83.         }
  84.         if (!$user User::getById($portalUser->getPimcoreUser())) {
  85.             return 0;
  86.         }
  87.         return $user->getId();
  88.     }
  89.     public function isAdminRestApiCall()
  90.     {
  91.         $pathInfo $this->requestStack->getMasterRequest() ? $this->requestStack->getMasterRequest()->getPathInfo() : null;
  92.         if (empty($pathInfo)) {
  93.             return false;
  94.         }
  95.         if (strpos($pathInfo'/_portal-engine/api/') === || strpos($pathInfo'/_portal-engine/stats/') === 0) {
  96.             return $this->getPimcoreUser() instanceof User;
  97.         }
  98.         return false;
  99.     }
  100.     public function isAdminPreviewCall()
  101.     {
  102.         if (Tool::isFrontendRequestByAdmin()) {
  103.             return $this->getPimcoreUser() instanceof User;
  104.         }
  105.         return false;
  106.     }
  107. }