*/ private $map = []; public function __construct( private EntityManager $entityManager, private AclManager $aclManager, private PortalAclManagerContainer $portalAclManagerContainer, private ApplicationState $applicationState ) {} 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 ?Portal $portal */ $portal = $this->entityManager ->getRDBRepository(User::ENTITY_TYPE) ->getRelation($user, 'portals') ->findOne(); if (!$portal) { throw new RuntimeException("No portal for portal user '" . $user->getId() . "'."); } $aclManager = $this->portalAclManagerContainer->get($portal); } return $aclManager; } }