diff --git a/application/Espo/Core/Select/AccessControl/DefaultFilterResolver.php b/application/Espo/Core/Select/AccessControl/DefaultFilterResolver.php index 3ec87d8255..63db8e5ea7 100644 --- a/application/Espo/Core/Select/AccessControl/DefaultFilterResolver.php +++ b/application/Espo/Core/Select/AccessControl/DefaultFilterResolver.php @@ -51,6 +51,10 @@ class DefaultFilterResolver implements FilterResolver public function resolve(): ?string { + if ($this->acl->checkReadNo($this->entityType)) { + return 'no'; + } + if ($this->acl->checkReadOnlyOwn($this->entityType)) { return 'onlyOwn'; } @@ -59,12 +63,8 @@ class DefaultFilterResolver implements FilterResolver return 'onlyTeam'; } - if ($this->acl->checkReadNo($this->entityType)) { - return 'no'; - } - if ($this->acl->checkReadAll($this->entityType)) { - return null; + return 'all'; } return 'no'; diff --git a/application/Espo/Core/Select/AccessControl/DefaultPortalFilterResolver.php b/application/Espo/Core/Select/AccessControl/DefaultPortalFilterResolver.php index 819df5b7fe..3e7b3d18b2 100644 --- a/application/Espo/Core/Select/AccessControl/DefaultPortalFilterResolver.php +++ b/application/Espo/Core/Select/AccessControl/DefaultPortalFilterResolver.php @@ -51,6 +51,10 @@ class DefaultPortalFilterResolver implements FilterResolver public function resolve(): ?string { + if ($this->acl->checkReadNo($this->entityType)) { + return 'no'; + } + if ($this->acl->checkReadOnlyOwn($this->entityType)) { return 'portalOnlyOwn'; } @@ -63,12 +67,8 @@ class DefaultPortalFilterResolver implements FilterResolver return 'portalOnlyContact'; } - if ($this->acl->checkReadNo($this->entityType)) { - return 'no'; - } - if ($this->acl->checkReadAll($this->entityType)) { - return null; + return 'portalAll'; } return 'no'; diff --git a/application/Espo/Core/Select/AccessControl/Filters/All.php b/application/Espo/Core/Select/AccessControl/Filters/All.php new file mode 100644 index 0000000000..597f55a20e --- /dev/null +++ b/application/Espo/Core/Select/AccessControl/Filters/All.php @@ -0,0 +1,43 @@ +accessControlFilterResolverFactory->create( - $this->entityType, $this->user - ); + $accessControlFilterResolver = $this->accessControlFilterResolverFactory + ->create($this->entityType, $this->user); $filterName = $accessControlFilterResolver->resolve(); @@ -103,7 +102,8 @@ class AccessControlFilter } if ($this->accessControlFilterFactory->has($this->entityType, $filterName)) { - $filter = $this->accessControlFilterFactory->create($this->entityType, $this->user, $filterName); + $filter = $this->accessControlFilterFactory + ->create($this->entityType, $this->user, $filterName); $filter->apply($queryBuilder); diff --git a/tests/unit/Espo/Core/Select/AccessControl/FilterResolverTest.php b/tests/unit/Espo/Core/Select/AccessControl/FilterResolverTest.php index 76d3775575..a161ebc0cc 100644 --- a/tests/unit/Espo/Core/Select/AccessControl/FilterResolverTest.php +++ b/tests/unit/Espo/Core/Select/AccessControl/FilterResolverTest.php @@ -42,7 +42,7 @@ use Espo\{ class FilterResolverTest extends \PHPUnit\Framework\TestCase { - protected function setUp() : void + protected function setUp(): void { $this->acl = $this->createMock(Acl::class); $this->aclPortal = $this->createMock(AclPortal::class); @@ -55,7 +55,7 @@ class FilterResolverTest extends \PHPUnit\Framework\TestCase { $this->assertEquals( 'onlyOwn', - $this->initResolveTest(false, false, 'checkReadOnlyOwn') + $this->initResolveTest(false, 'checkReadOnlyOwn') ); } @@ -63,7 +63,7 @@ class FilterResolverTest extends \PHPUnit\Framework\TestCase { $this->assertEquals( 'onlyTeam', - $this->initResolveTest(false, false, 'checkReadOnlyTeam') + $this->initResolveTest(false, 'checkReadOnlyTeam') ); } @@ -71,7 +71,7 @@ class FilterResolverTest extends \PHPUnit\Framework\TestCase { $this->assertEquals( 'no', - $this->initResolveTest(false, false, 'checkReadNo') + $this->initResolveTest(false, 'checkReadNo') ); } @@ -79,7 +79,7 @@ class FilterResolverTest extends \PHPUnit\Framework\TestCase { $this->assertEquals( 'portalOnlyOwn', - $this->initResolveTest(true, false, 'checkReadOnlyOwn') + $this->initResolveTest(true, 'checkReadOnlyOwn') ); } @@ -87,7 +87,7 @@ class FilterResolverTest extends \PHPUnit\Framework\TestCase { $this->assertEquals( 'portalOnlyAccount', - $this->initResolveTest(true, false, 'checkReadOnlyAccount') + $this->initResolveTest(true, 'checkReadOnlyAccount') ); } @@ -95,7 +95,7 @@ class FilterResolverTest extends \PHPUnit\Framework\TestCase { $this->assertEquals( 'portalOnlyContact', - $this->initResolveTest(true, false, 'checkReadOnlyContact') + $this->initResolveTest(true, 'checkReadOnlyContact') ); } @@ -103,19 +103,27 @@ class FilterResolverTest extends \PHPUnit\Framework\TestCase { $this->assertEquals( 'no', - $this->initResolveTest(true, false, 'checkReadNo') + $this->initResolveTest(true, 'checkReadNo') ); } public function testResolveAll() { $this->assertEquals( - null, - $this->initResolveTest(false, true, 'checkReadAll') + 'all', + $this->initResolveTest(false, 'checkReadAll') ); } - protected function initResolveTest(bool $isPortal = false, bool $isAdmin = false, ?string $method) : ?string + public function testResolvePortalAll() + { + $this->assertEquals( + 'portalAll', + $this->initResolveTest(true, 'checkReadAll') + ); + } + + protected function initResolveTest(bool $isPortal = false, ?string $method = null): ?string { $acl = $this->acl;