CurrentEducationNotationConfigExtension.php 1.9 KB

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