. * * 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\Modules\Crm\Classes\Acl\Task\LinkCheckers; use Espo\Core\Acl\LinkChecker; use Espo\Core\AclManager; use Espo\Entities\Email; use Espo\Entities\User; use Espo\Modules\Crm\Entities\Account; use Espo\Modules\Crm\Entities\Task; use Espo\ORM\Entity; use Espo\ORM\EntityManager; /** * @implements LinkChecker * @noinspection PhpUnused */ class AccountLinkChecker implements LinkChecker { public function __construct( private AclManager $aclManager, private EntityManager $entityManager ) {} public function check(User $user, Entity $entity, Entity $foreignEntity): bool { if ($this->aclManager->checkEntityRead($user, $foreignEntity)) { return true; } if (!$entity->isNew()) { return false; } /** @var ?string $emailId */ $emailId = $entity->get('originalEmailId'); if (!$emailId) { return false; } $email = $this->entityManager ->getRepositoryByClass(Email::class) ->getById($emailId); if (!$email) { return false; } if ( $email->getAccount() && $foreignEntity->getId() === $email->getAccount()->getId() && $this->aclManager->checkEntityRead($user, $email) ) { return true; } $parent = $email->getParent(); if (!$parent) { return false; } if ( $parent->getEntityType() !== Account::ENTITY_TYPE || $parent->getId() !== $foreignEntity->getId() ) { return false; } return $this->aclManager->checkEntityRead($user, $email); } }