| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- <?php
- declare(strict_types=1);
- namespace App\Doctrine\Access;
- 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\Access\Access;
- use Doctrine\ORM\QueryBuilder;
- use Symfony\Component\Security\Core\Security;
- /**
- * Class AccessExtension : Filtre de sécurité par défaut pour une resource Access
- * @package App\Doctrine\Access
- */
- final class AccessExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface
- {
- private Security $security;
- private HandleAccessExtension $handleAccessExtension;
- public function __construct(Security $security, HandleAccessExtension $handleAccessExtension)
- {
- $this->security = $security;
- $this->handleAccessExtension = $handleAccessExtension;
- }
- public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null): void
- {
- $this->addWhere($queryBuilder, $resourceClass, $operationName);
- }
- public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = []): void
- {
- $this->addWhere($queryBuilder, $resourceClass, $operationName);
- }
- private function addWhere(QueryBuilder $queryBuilder, string $resourceClass, string $operationName): void
- {
- if (Access::class !== $resourceClass) {
- return;
- }
- /** @var Access $currentUser */
- $currentUser = $this->security->getUser();
- $rootAlias = $queryBuilder->getRootAliases()[0];
- $queryBuilder->andWhere(sprintf('%s.organization = :current_organization', $rootAlias));
- $queryBuilder->setParameter('current_organization', $currentUser->getOrganization());
- $this->handleAccessExtension->addWhere($queryBuilder, $operationName);
- }
- }
|