security = $security; } public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null): void { /*if ($this->security->isGranted('ROLE_ADMIN')) { return; }*/ /* if ('collection_query' === $operationName) { if (null === $user = $this->security->getUser()) { throw new AccessDeniedException('Access Denied.'); } $rootAlias = $queryBuilder->getRootAliases()[0]; $queryBuilder->andWhere(sprintf('%s.user = :current_user', $rootAlias)); $queryBuilder->setParameter('current_user', $user); }*/ $this->addWhere($queryBuilder, $resourceClass); } public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = []): void { //error_log('applyToItem'); //$this->addWhere($queryBuilder, $resourceClass); } private function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void { if (Message::class !== $resourceClass) { return; } /*if ($this->security->isGranted('ROLE_ADMIN')) { return; }*/ $user = $this->security->getUser(); $alias = $queryBuilder->getRootAliases()[0]; $queryBuilder->andWhere(" ($alias.userSender = :current AND $alias.msgType = :outbox) OR ($alias.userReceiver = :current AND $alias.msgType = :inbox) OR ($alias.userReceiver = :current AND $alias.msgType = :invitation) OR ($alias.userReceiver = :current AND $alias.msgType = :promoted) OR ($alias.userReceiver = :current AND $alias.msgType = :wallPost) OR ($alias.userReceiver = :current AND $alias.msgType = :conversation) "); $queryBuilder->setParameters([ 'current' => $user, 'inbox' => Message::MESSAGE_TYPE_INBOX, 'outbox' => Message::MESSAGE_TYPE_OUTBOX, 'invitation' => Message::MESSAGE_TYPE_INVITATION, 'promoted' => Message::MESSAGE_TYPE_PROMOTED, 'wallPost' => Message::MESSAGE_TYPE_WALL, 'conversation' => Message::MESSAGE_STATUS_CONVERSATION, ]); } }