no distinct, ref

This commit is contained in:
Yuri Kuznetsov
2024-09-13 16:15:58 +03:00
parent 9ab1d41c7a
commit cde2d83fa7
2 changed files with 38 additions and 21 deletions
@@ -29,14 +29,20 @@
namespace Espo\Classes\Select\User\AccessControlFilters;
use Espo\Core\Acl\Permission;
use Espo\Entities\Team;
use Espo\ORM\Query\Part\Condition;
use Espo\ORM\Query\Part\Expression;
use Espo\ORM\Query\Part\Where\OrGroup;
use Espo\ORM\Query\SelectBuilder;
use Espo\Core\Acl\Table;
use Espo\Core\AclManager;
use Espo\Core\Select\AccessControl\Filter;
use Espo\Entities\User;
/**
* @noinspection PhpUnused
*/
class OnlyTeam implements Filter
{
public function __construct(
@@ -46,20 +52,36 @@ class OnlyTeam implements Filter
public function apply(SelectBuilder $queryBuilder): void
{
$orGroup = [
'teamsAccess.id' => $this->user->getLinkMultipleIdList('teams'),
'id' => $this->user->getId(),
];
$orGroupBuilder = OrGroup::createBuilder();
if ($this->aclManager->getPermissionLevel($this->user, 'portal') === Table::LEVEL_YES) {
$orGroup['type'] = User::TYPE_PORTAL;
$orGroupBuilder
->add(
Condition::equal(
Expression::column('id'),
$this->user->getId()
)
)
->add(
Condition::in(
Expression::column('id'),
SelectBuilder::create()
->from(Team::RELATIONSHIP_TEAM_USER)
->select('userId')
->where(['teamId' => $this->user->getTeamIdList()])
->build()
)
);
if ($this->aclManager->getPermissionLevel($this->user, Permission::PORTAL) === Table::LEVEL_YES) {
$orGroupBuilder->add(
Condition::equal(
Expression::column('type'),
User::TYPE_PORTAL
)
);
}
$queryBuilder
->distinct()
->leftJoin('teams', 'teamsAccess')
->where([
'OR' => $orGroup,
]);
$queryBuilder->where($orGroupBuilder->build());
}
}
@@ -30,19 +30,14 @@
namespace Espo\Classes\Select\User\AccessControlFilters;
use Espo\ORM\Query\SelectBuilder;
use Espo\Core\Select\AccessControl\Filter;
use Espo\Entities\User;
class PortalOnlyOwn implements Filter
{
private $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function __construct(private User $user)
{}
public function apply(SelectBuilder $queryBuilder): void
{