addWhere($queryBuilder, $resourceClass); } public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, ?Operation $operation = null, array $context = []): void { $this->addWhere($queryBuilder, $resourceClass); } private function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void { if (Project::class !== $resourceClass) { return; } $user = $this->security->getUser(); if (!$user instanceof User) { return; } // Only restrict for ROLE_CLIENT users who are NOT admins if (!in_array('ROLE_CLIENT', $user->getRoles(), true) || in_array('ROLE_ADMIN', $user->getRoles(), true)) { return; } $rootAlias = $queryBuilder->getRootAliases()[0]; $allowedProjectIds = $user->getAllowedProjects()->map( fn (Project $project) => $project->getId(), )->toArray(); if ([] === $allowedProjectIds) { $queryBuilder->andWhere('1 = 0'); return; } $queryBuilder ->andWhere($rootAlias.'.id IN (:allowed_project_ids)') ->setParameter('allowed_project_ids', $allowedProjectIds) ; } }