AccessRepository.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Repository\Access;
  4. use App\Entity\Access\Access;
  5. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. /**
  10. * @method Access|null find($id, $lockMode = null, $lockVersion = null)
  11. * @method Access|null findOneBy(array $criteria, array $orderBy = null)
  12. * @method Access[] findAll()
  13. * @method Access[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  14. */
  15. final class AccessRepository extends ServiceEntityRepository implements UserLoaderInterface
  16. {
  17. const ACCESS_NAME_HEADER = 'X-AccessId';
  18. private RequestStack $requestStack;
  19. public function __construct(ManagerRegistry $registry, RequestStack $requestStack)
  20. {
  21. parent::__construct($registry, Access::class);
  22. $this->requestStack = $requestStack;
  23. }
  24. /**
  25. * Méthode permettant de fournir un userProvider custom (voir config provider : access_provider)
  26. * @param string $username
  27. * @return mixed|\Symfony\Component\Security\Core\User\UserInterface|null
  28. * @throws \Doctrine\ORM\NonUniqueResultException
  29. */
  30. public function loadUserByUsername(string $username)
  31. {
  32. $entityManager = $this->getEntityManager();
  33. $id = $this->requestStack->getMasterRequest()->headers->get(self::ACCESS_NAME_HEADER);
  34. return $entityManager->createQuery(
  35. 'SELECT a
  36. FROM App\Entity\Access\Access a
  37. INNER JOIN a.person p
  38. WHERE p.username = :query AND a.id = :id'
  39. )
  40. ->setParameter('query', $username)
  41. ->setParameter('id', $id)
  42. ->getOneOrNullResult();
  43. }
  44. // /**
  45. // * @return Access[] Returns an array of Access objects
  46. // */
  47. /*
  48. public function findByExampleField($value)
  49. {
  50. return $this->createQueryBuilder('a')
  51. ->andWhere('a.exampleField = :val')
  52. ->setParameter('val', $value)
  53. ->orderBy('a.id', 'ASC')
  54. ->setMaxResults(10)
  55. ->getQuery()
  56. ->getResult()
  57. ;
  58. }
  59. */
  60. /*
  61. public function findOneBySomeField($value): ?Access
  62. {
  63. return $this->createQueryBuilder('a')
  64. ->andWhere('a.exampleField = :val')
  65. ->setParameter('val', $value)
  66. ->getQuery()
  67. ->getOneOrNullResult()
  68. ;
  69. }
  70. */
  71. }