AllowedAddressPostalExtension.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Doctrine\Core;
  4. use ApiPlatform\Metadata\Operation;
  5. use App\Doctrine\AbstractExtension;
  6. use App\Entity\Access\Access;
  7. use App\Entity\Core\AddressPostal;
  8. use Doctrine\ORM\QueryBuilder;
  9. use Symfony\Bundle\SecurityBundle\Security;
  10. /**
  11. * Class AllowedAddressPostalExtension : Filtre de sécurité par défaut pour une resource AddressPostal.
  12. */
  13. final class AllowedAddressPostalExtension extends AbstractExtension
  14. {
  15. public function __construct(private Security $security)
  16. {
  17. }
  18. public function supports(string $resourceClass, ?Operation $operation): bool
  19. {
  20. return $resourceClass === AddressPostal::class;
  21. }
  22. protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass, ?Operation $operation): void
  23. {
  24. /** @var Access $currentUser */
  25. $currentUser = $this->security->getUser();
  26. if ($currentUser === null || $currentUser->getOrganization() === null) {
  27. return;
  28. }
  29. $rootAliases = $queryBuilder->getRootAliases();
  30. if (empty($rootAliases)) {
  31. throw new \LogicException('No root alias defined.');
  32. }
  33. $rootAlias = $rootAliases[0];
  34. $queryBuilder
  35. ->innerJoin(sprintf('%s.organizationAddressPostal', $rootAlias), 'organization_address_postal')
  36. ->andWhere('organization_address_postal.organization = :organization')
  37. ->setParameter('organization', $currentUser->getOrganization());
  38. }
  39. }