From 5819cdb8d7c98e8a813d73f8a276fce1773bec2d Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Thu, 31 Oct 2024 16:46:01 +0200 Subject: [PATCH] email replied teams check --- .../Email/LinkCheckers/TeamsLinkChecker.php | 75 +++++++++++++++++++ .../Resources/metadata/aclDefs/Email.json | 3 +- 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 application/Espo/Classes/Acl/Email/LinkCheckers/TeamsLinkChecker.php diff --git a/application/Espo/Classes/Acl/Email/LinkCheckers/TeamsLinkChecker.php b/application/Espo/Classes/Acl/Email/LinkCheckers/TeamsLinkChecker.php new file mode 100644 index 0000000000..0874e7cf75 --- /dev/null +++ b/application/Espo/Classes/Acl/Email/LinkCheckers/TeamsLinkChecker.php @@ -0,0 +1,75 @@ +. + * + * 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\Classes\Acl\Email\LinkCheckers; + +use Espo\Core\Acl\LinkChecker; +use Espo\Core\AclManager; +use Espo\Entities\Email; +use Espo\Entities\Team; +use Espo\Entities\User; +use Espo\ORM\Entity; +use Espo\ORM\EntityManager; + +/** + * @implements LinkChecker + * @noinspection PhpUnused + */ +class TeamsLinkChecker implements LinkChecker +{ + public function __construct( + private EntityManager $entityManager, + private AclManager $aclManager + ) {} + + public function check(User $user, Entity $entity, Entity $foreignEntity): bool + { + if ($this->aclManager->checkEntityRead($user, $foreignEntity)) { + return true; + } + + if (!$entity->getReplied()) { + return false; + } + + $replied = $this->entityManager + ->getRepositoryByClass(Email::class) + ->getById($entity->getReplied()->getId()); + + if (!$replied) { + return false; + } + + if ($replied->getTeams()->hasId($foreignEntity->getId())) { + return true; + } + + return false; + } +} diff --git a/application/Espo/Resources/metadata/aclDefs/Email.json b/application/Espo/Resources/metadata/aclDefs/Email.json index 7663998b9a..aa48d7f40c 100644 --- a/application/Espo/Resources/metadata/aclDefs/Email.json +++ b/application/Espo/Resources/metadata/aclDefs/Email.json @@ -6,6 +6,7 @@ "assignmentCheckerClassName": "Espo\\Classes\\Acl\\Email\\AssignmentChecker", "readOwnerUserField": "users", "linkCheckerClassNameMap": { - "parent": "Espo\\Classes\\Acl\\Email\\LinkCheckers\\ParentLinkChecker" + "parent": "Espo\\Classes\\Acl\\Email\\LinkCheckers\\ParentLinkChecker", + "teams": "Espo\\Classes\\Acl\\Email\\LinkCheckers\\TeamsLinkChecker" } }