. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ namespace Espo\Core\Portal; use Espo\Entities\Portal; use Espo\Core\InjectableFactory; use LogicException; /** * Used when logged to CRM (not to portal) to provide an access checking ability for a specific portal. * E.g. check whether a portal user has access to some record within a specific portal. */ class AclManagerContainer { /** * @var array */ private $data = []; public function __construct(private InjectableFactory $injectableFactory) {} public function get(Portal $portal): AclManager { if (!$portal->hasId()) { throw new LogicException("AclManagerContainer: portal should have ID."); } $id = $portal->getId(); if (!isset($this->data[$id])) { $aclManager = $this->injectableFactory->create(AclManager::class); $aclManager->setPortal($portal); $this->data[$id] = $aclManager; } return $this->data[$id]; } }