Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
php:symfony:расширения_orm_extension [2024/04/15 21:37] – 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\Extension\CurrentUserExtension: |
- | tags: | + | tags: |
- | - { name: api_platform.doctrine.orm.query_extension.collection, priority: 9 } | + | - { name: api_platform.doctrine.orm.query_extension.collection } |
- | - { name: api_platform.doctrine.orm.query_extension.item } | + | - { name: api_platform.doctrine.orm.query_extension.item } |
</ | </ | ||
Строка 21: | Строка 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-> | ||
} | } | ||
} | } |