Skip to content

Commit 2387fd5

Browse files
authored
Simplify the extension example
1 parent 43d503d commit 2387fd5

File tree

1 file changed

+11
-25
lines changed

1 file changed

+11
-25
lines changed

core/extensions.md

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -68,51 +68,37 @@ use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInter
6868
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
6969
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
7070
use App\Entity\Offer;
71-
use App\Entity\User;
7271
use Doctrine\ORM\QueryBuilder;
73-
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
74-
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
72+
use Symfony\Component\Security\Core\Security;
7573

7674
final class CurrentUserExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface
7775
{
78-
private $tokenStorage;
79-
private $authorizationChecker;
76+
private $security;
8077

81-
public function __construct(TokenStorageInterface $tokenStorage, AuthorizationCheckerInterface $checker)
78+
public function __construct(Security $security)
8279
{
83-
$this->tokenStorage = $tokenStorage;
84-
$this->authorizationChecker = $checker;
80+
$this->security = $security;
8581
}
8682

87-
/**
88-
* {@inheritdoc}
89-
*/
9083
public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null)
9184
{
9285
$this->addWhere($queryBuilder, $resourceClass);
9386
}
9487

95-
/**
96-
* {@inheritdoc}
97-
*/
9888
public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = [])
9989
{
10090
$this->addWhere($queryBuilder, $resourceClass);
10191
}
10292

103-
/**
104-
*
105-
* @param QueryBuilder $queryBuilder
106-
* @param string $resourceClass
107-
*/
108-
private function addWhere(QueryBuilder $queryBuilder, string $resourceClass)
93+
private function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
10994
{
110-
$user = $this->tokenStorage->getToken()->getUser();
111-
if ($user instanceof User && Offer::class === $resourceClass && !$this->authorizationChecker->isGranted('ROLE_ADMIN')) {
112-
$rootAlias = $queryBuilder->getRootAliases()[0];
113-
$queryBuilder->andWhere(sprintf('%s.user = :current_user', $rootAlias));
114-
$queryBuilder->setParameter('current_user', $user->getId());
95+
if (Offer::class !== $resourceClass || $this->security->isGranted('ROLE_ADMIN') || null === $user = $this->security->getUser()) {
96+
return;
11597
}
98+
99+
$rootAlias = $queryBuilder->getRootAliases()[0];
100+
$queryBuilder->andWhere(sprintf('%s.user = :current_user', $rootAlias));
101+
$queryBuilder->setParameter('current_user', $user));
116102
}
117103
}
118104

0 commit comments

Comments
 (0)