Utils.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\Access;
  4. use App\Entity\Access\Access;
  5. use App\Service\ServiceIterator\OptionalsRolesIterator;
  6. use App\Test\Service\Access\UtilsTest;
  7. use Symfony\Component\Security\Core\Role\RoleHierarchyInterface;
  8. /**
  9. * Class Utils : service rassemblant des fonctions d'aides pour les questions se rapportant à l'access
  10. * @package App\Service\Resource
  11. */
  12. class Utils
  13. {
  14. public function __construct(
  15. private RoleHierarchyInterface $roleHierarchy,
  16. private OptionalsRolesIterator $optionalsRolesIterator
  17. )
  18. {}
  19. /**
  20. * Filtre un tableau d'Access pour ne laisser que les Accesses ne correspondant pas à l'Access passé en second parametre
  21. * @param array<Access> $accesses
  22. * @param Access $access
  23. * @return array
  24. * @see UtilsTest::testFilterAccesses()
  25. */
  26. public function filterAccesses(array $accesses, Access $access): array {
  27. return array_filter($accesses, function($a) use($access){
  28. /** @var Access $a */
  29. return $a->getId() !== $access->getId();
  30. });
  31. }
  32. /**
  33. * Recherche parmis les roles si l'Access possède celui passé en paramètre
  34. * @param Access $access
  35. * @param string $roleToHave
  36. * @return bool
  37. * @see UtilsTest::testHasRoles()
  38. */
  39. public function hasRoles(Access $access, string $roleToHave): bool{
  40. return in_array($roleToHave, $this->getAllRoles($access));
  41. }
  42. /**
  43. * Va récupérer les roles d'access + les roles optionnels possibles
  44. * @param Access $access
  45. * @return array
  46. * @see UtilsTest::testGetAllRoles()
  47. */
  48. public function getAllRoles(Access $access): array {
  49. $roles = $this->optionalsRolesIterator->getOptionalsRoles($access);
  50. return $this->roleHierarchy->getReachableRoleNames(array_merge($access->getRoles(), $roles));
  51. }
  52. }