@@ -68,51 +68,37 @@ use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInter
68
68
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
69
69
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
70
70
use App\Entity\Offer;
71
- use App\Entity\User;
72
71
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;
75
73
76
74
final class CurrentUserExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface
77
75
{
78
- private $tokenStorage;
79
- private $authorizationChecker;
76
+ private $security;
80
77
81
- public function __construct(TokenStorageInterface $tokenStorage, AuthorizationCheckerInterface $checker )
78
+ public function __construct(Security $security )
82
79
{
83
- $this->tokenStorage = $tokenStorage;
84
- $this->authorizationChecker = $checker;
80
+ $this->security = $security;
85
81
}
86
82
87
- /**
88
- * {@inheritdoc}
89
- */
90
83
public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null)
91
84
{
92
85
$this->addWhere($queryBuilder, $resourceClass);
93
86
}
94
87
95
- /**
96
- * {@inheritdoc}
97
- */
98
88
public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = [])
99
89
{
100
90
$this->addWhere($queryBuilder, $resourceClass);
101
91
}
102
92
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
109
94
{
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;
115
97
}
98
+
99
+ $rootAlias = $queryBuilder->getRootAliases()[0];
100
+ $queryBuilder->andWhere(sprintf('%s.user = :current_user', $rootAlias));
101
+ $queryBuilder->setParameter('current_user', $user));
116
102
}
117
103
}
118
104
0 commit comments