*/ private $map = []; public function __construct( EntityManager $entityManager, AclManager $aclManager, PortalAclManagerContainer $portalAclManagerContainer, ApplicationState $applicationState ) { $this->entityManager = $entityManager; $this->aclManager = $aclManager; $this->portalAclManagerContainer = $portalAclManagerContainer; $this->applicationState = $applicationState; } /** * @throws Error */ public function get(User $user): AclManager { $key = $user->hasId() ? $user->getId() : spl_object_hash($user); if (!isset($this->map[$key])) { $this->map[$key] = $this->load($user); } return $this->map[$key]; } private function load(User $user): AclManager { $aclManager = $this->aclManager; if ($user->isPortal() && !$this->applicationState->isPortal()) { /** @var ?\Espo\Entities\Portal $portal */ $portal = $this->entityManager ->getRDBRepository(User::ENTITY_TYPE) ->getRelation($user, 'portals') ->findOne(); if (!$portal) { throw new Error("No portal for portal user '" . $user->getId() . "'."); } $aclManager = $this->portalAclManagerContainer->get($portal); } return $aclManager; } }