| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- <?php
- declare(strict_types=1);
- namespace App\Service\Access;
- use App\Entity\Access\Access;
- use App\Service\ServiceIterator\OptionalsRolesIterator;
- use App\Test\Service\Access\UtilsTest;
- use Symfony\Component\Security\Core\Role\RoleHierarchyInterface;
- /**
- * Class Utils : service rassemblant des fonctions d'aides pour les questions se rapportant à l'access
- * @package App\Service\Resource
- */
- class Utils
- {
- public function __construct(
- private RoleHierarchyInterface $roleHierarchy,
- private OptionalsRolesIterator $optionalsRolesIterator
- )
- {}
- /**
- * Filtre un tableau d'Access pour ne laisser que les Accesses ne correspondant pas à l'Access passé en second parametre
- * @param array<Access> $accesses
- * @param Access $access
- * @return array
- * @see UtilsTest::testFilterAccesses()
- */
- public function filterAccesses(array $accesses, Access $access): array {
- return array_filter($accesses, function($a) use($access){
- /** @var Access $a */
- return $a->getId() !== $access->getId();
- });
- }
- /**
- * Recherche parmis les roles si l'Access possède celui passé en paramètre
- * @param Access $access
- * @param string $roleToHave
- * @return bool
- * @see UtilsTest::testHasRoles()
- */
- public function hasRoles(Access $access, string $roleToHave): bool{
- return in_array($roleToHave, $this->getAllRoles($access));
- }
- /**
- * Va récupérer les roles d'access + les roles optionnels possibles
- * @param Access $access
- * @return array
- * @see UtilsTest::testGetAllRoles()
- */
- public function getAllRoles(Access $access): array {
- $roles = $this->optionalsRolesIterator->getOptionalsRoles($access);
- return $this->roleHierarchy->getReachableRoleNames(array_merge($access->getRoles(), $roles));
- }
- }
|