From c1ae7dff955092a2abf0a7b5eb7e5aa5b318543e Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 26 Mar 2025 11:10:16 +0200 Subject: [PATCH] select ref, docs --- application/Espo/Core/Acl/AccessChecker.php | 5 +++++ application/Espo/Core/Acl/OwnershipChecker.php | 5 +++++ application/Espo/Core/Select/AccessControl/Filter.php | 9 +++++++++ .../Espo/Core/Select/AccessControl/FilterFactory.php | 7 +++++++ .../Espo/Core/Select/AccessControl/FilterResolver.php | 6 ++++++ .../Core/Select/AccessControl/FilterResolverFactory.php | 2 ++ .../Select/AccessControl/FilterResolverFactoryTest.php | 1 + 7 files changed, 35 insertions(+) diff --git a/application/Espo/Core/Acl/AccessChecker.php b/application/Espo/Core/Acl/AccessChecker.php index c994d02d0c..3bf962006d 100644 --- a/application/Espo/Core/Acl/AccessChecker.php +++ b/application/Espo/Core/Acl/AccessChecker.php @@ -31,6 +31,11 @@ namespace Espo\Core\Acl; use Espo\Entities\User; +/** + * Bindings: + * - `$entityType` – as of v9.1.0. + * - `Espo\Core\AclManager` + */ interface AccessChecker { /** diff --git a/application/Espo/Core/Acl/OwnershipChecker.php b/application/Espo/Core/Acl/OwnershipChecker.php index fa39a60f1c..b3d9a9e967 100644 --- a/application/Espo/Core/Acl/OwnershipChecker.php +++ b/application/Espo/Core/Acl/OwnershipChecker.php @@ -29,4 +29,9 @@ namespace Espo\Core\Acl; +/** + * Bindings: + * - `$entityType` – as of v9.1.0. + * - `Espo\Core\AclManager` + */ interface OwnershipChecker {} diff --git a/application/Espo/Core/Select/AccessControl/Filter.php b/application/Espo/Core/Select/AccessControl/Filter.php index 8a48df7853..4b1cb5e55a 100644 --- a/application/Espo/Core/Select/AccessControl/Filter.php +++ b/application/Espo/Core/Select/AccessControl/Filter.php @@ -31,6 +31,15 @@ namespace Espo\Core\Select\AccessControl; use Espo\ORM\Query\SelectBuilder as QueryBuilder; +/** + * An access filter. + * + * Bindings: + * - `$entityType` + * - `Espo\Entities\User` + * - `Espo\Core\AclManager` – as of v9.1. + * - `Espo\Core\Acl` + */ interface Filter { public function apply(QueryBuilder $queryBuilder): void; diff --git a/application/Espo/Core/Select/AccessControl/FilterFactory.php b/application/Espo/Core/Select/AccessControl/FilterFactory.php index 0d7edccafc..2c64c305e7 100644 --- a/application/Espo/Core/Select/AccessControl/FilterFactory.php +++ b/application/Espo/Core/Select/AccessControl/FilterFactory.php @@ -35,6 +35,8 @@ use Espo\Core\Binding\Binder; use Espo\Core\Binding\BindingContainer; use Espo\Core\Binding\BindingData; use Espo\Core\InjectableFactory; +use Espo\Core\Portal\Acl as PortalAcl; +use Espo\Core\Portal\AclManager as PortalAclManager; use Espo\Core\Select\Helpers\FieldHelper; use Espo\Core\Utils\Metadata; use Espo\Entities\User; @@ -66,6 +68,11 @@ class FilterFactory ->bindInstance(AclManager::class, $this->aclManager) ->bindInstance(Acl::class, $this->acl); + if ($user->isPortal()) { + $binder->bindInstance(PortalAcl::class, $this->acl); + $binder->bindInstance(PortalAclManager::class, $this->aclManager); + } + $binder ->for($className) ->bindValue('$entityType', $entityType); diff --git a/application/Espo/Core/Select/AccessControl/FilterResolver.php b/application/Espo/Core/Select/AccessControl/FilterResolver.php index ff689db68f..08c64b7638 100644 --- a/application/Espo/Core/Select/AccessControl/FilterResolver.php +++ b/application/Espo/Core/Select/AccessControl/FilterResolver.php @@ -31,6 +31,12 @@ namespace Espo\Core\Select\AccessControl; /** * Resolves an access filter. An entity type, acl and user to be passed to the constructor. + * + * Bindings: + * - `$entityType` + * - `Espo\Entities\User` + * - `Espo\Core\AclManager` – as of v9.1. + * - `Espo\Core\Acl` */ interface FilterResolver { diff --git a/application/Espo/Core/Select/AccessControl/FilterResolverFactory.php b/application/Espo/Core/Select/AccessControl/FilterResolverFactory.php index 13252014f6..4e7483e663 100644 --- a/application/Espo/Core/Select/AccessControl/FilterResolverFactory.php +++ b/application/Espo/Core/Select/AccessControl/FilterResolverFactory.php @@ -33,6 +33,7 @@ use Espo\Core\AclManager; use Espo\Core\InjectableFactory; use Espo\Core\Acl; use Espo\Core\Portal\Acl as PortalAcl; +use Espo\Core\Portal\AclManager as PortalAclManager; use Espo\Core\Utils\Metadata; use Espo\Core\Binding\BindingContainer; use Espo\Core\Binding\Binder; @@ -65,6 +66,7 @@ class FilterResolverFactory if ($user->isPortal()) { $binder->bindInstance(PortalAcl::class, $this->acl); + $binder->bindInstance(PortalAclManager::class, $this->aclManager); } $binder diff --git a/tests/unit/Espo/Core/Select/AccessControl/FilterResolverFactoryTest.php b/tests/unit/Espo/Core/Select/AccessControl/FilterResolverFactoryTest.php index 1d8243b26e..b415bac9ac 100644 --- a/tests/unit/Espo/Core/Select/AccessControl/FilterResolverFactoryTest.php +++ b/tests/unit/Espo/Core/Select/AccessControl/FilterResolverFactoryTest.php @@ -119,6 +119,7 @@ class FilterResolverFactoryTest extends TestCase if ($this->user->isPortal()) { $binder->bindInstance(PortalAcl::class, $this->acl); + $binder->bindInstance(PortalAclManager::class, $this->aclManager); } $binder