CurrentOrganizationAddressPostalExtension.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Doctrine\Organization;
  4. use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
  5. use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
  6. use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
  7. use App\Entity\Access\Access;
  8. use App\Entity\Organization\OrganizationAddressPostal;
  9. use Doctrine\ORM\QueryBuilder;
  10. use Symfony\Component\Security\Core\Security;
  11. /**
  12. * Class OrganizationAddressPosteExtension : Filtre de sécurité par défaut pour une resource OrganizationAddressPostal
  13. * @package App\Doctrine\Core
  14. */
  15. final class CurrentOrganizationAddressPostalExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface
  16. {
  17. public function __construct(private Security $security)
  18. { }
  19. public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null): void
  20. {
  21. $this->addWhere($queryBuilder, $resourceClass, $operationName);
  22. }
  23. public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = []): void
  24. {
  25. $this->addWhere($queryBuilder, $resourceClass, $operationName);
  26. }
  27. private function addWhere(QueryBuilder $queryBuilder, string $resourceClass, string $operationName): void
  28. {
  29. if (OrganizationAddressPostal::class !== $resourceClass) {
  30. return;
  31. }
  32. /** @var Access $currentUser */
  33. $currentUser = $this->security->getUser();
  34. $rootAlias = $queryBuilder->getRootAliases()[0];
  35. $queryBuilder
  36. ->andWhere(sprintf('%s.organization = :organization', $rootAlias))
  37. ->setParameter('organization', $currentUser->getOrganization())
  38. ;
  39. }
  40. }