Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| php:symfony:расширения_orm_extension [2024/04/15 20:27] – mirocow | php:symfony:расширения_orm_extension [2024/04/15 22:57] (текущий) – mirocow | ||
|---|---|---|---|
| Строка 2: | Строка 2: | ||
| ====== Расширения ORM / Extension ====== | ====== Расширения ORM / Extension ====== | ||
| + | |||
| + | * QueryCollectionExtensionInterface | ||
| + | * QueryItemExtensionInterface | ||
| + | |||
| + | ===== Настройки / Использование ===== | ||
| services.yaml | services.yaml | ||
| Строка 9: | Строка 14: | ||
| services: | services: | ||
| - | App\Serializer\UserContextBuilder: | + | App\Extension\CurrentUserExtension: |
| - | | + | |
| - | | + | - { name: api_platform.doctrine.orm.query_extension.collection } |
| - | | + | - { name: api_platform.doctrine.orm.query_extension.item } |
| </ | </ | ||
| Строка 20: | Строка 26: | ||
| namespace App\Extension; | namespace App\Extension; | ||
| + | use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface; | ||
| + | use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface; | ||
| + | use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; | ||
| + | use App\Entity\Post; | ||
| + | use App\Entity\User; | ||
| use Doctrine\ORM\QueryBuilder; | use Doctrine\ORM\QueryBuilder; | ||
| - | use App\Repository\UserRepository; | + | use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; |
| - | use ApiPlatform\Metadata\Operation; | + | use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; |
| - | use Symfony\Bundle\SecurityBundle\Security; | + | |
| - | use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface; | + | |
| - | use ApiPlatform\Doctrine\Orm\Extension\QueryItemExtensionInterface; | + | |
| - | use ApiPlatform\Doctrine\Orm\Extension\QueryCollectionExtensionInterface; | + | |
| - | class CurrentUserExtension implements QueryCollectionExtensionInterface, | + | final class CurrentUserExtension implements QueryCollectionExtensionInterface, |
| { | { | ||
| - | | + | |
| - | private | + | private $authorizationChecker; |
| - | | + | const ENTITIES = [ |
| - | ) | + | Post::class, |
| + | | ||
| + | | ||
| + | |||
| + | public function __construct(TokenStorageInterface $tokenStorage, | ||
| { | { | ||
| + | $this-> | ||
| + | $this-> | ||
| } | } | ||
| - | public function applyToCollection(QueryBuilder $queryBuilder, | + | |
| + | * {@inheritdoc} | ||
| + | */ | ||
| + | | ||
| { | { | ||
| - | $this-> | + | $this-> |
| } | } | ||
| - | public function applyToItem(QueryBuilder $queryBuilder, | + | |
| + | * {@inheritdoc} | ||
| + | */ | ||
| + | | ||
| { | { | ||
| - | $this-> | + | $this-> |
| } | } | ||
| - | private function addWhere(QueryBuilder $queryBuilder): void | + | |
| + | * | ||
| + | * @param QueryBuilder $queryBuilder | ||
| + | * @param string $resourceClass | ||
| + | */ | ||
| + | | ||
| { | { | ||
| - | $user = $this->userRepository->findOneBy([ | + | $user = $this->tokenStorage->getToken()-> |
| - | | + | if ($user instanceof User && in_array($resourceClass, |
| - | | + | |
| - | + | ) { | |
| - | if ($user === null) { | + | $rootAlias = $queryBuilder->getRootAliases()[0]; |
| - | | + | $queryBuilder-> |
| + | | ||
| } | } | ||
| - | |||
| - | $rootAlias = $queryBuilder-> | ||
| - | $queryBuilder-> | ||
| - | $queryBuilder-> | ||
| - | $queryBuilder-> | ||
| } | } | ||
| } | } | ||