Commit 339339ef authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Modif de la collecte des rôles de l'utilisateur, permettant à l'appli de...

Modif de la collecte des rôles de l'utilisateur, permettant à l'appli de substituer son rôle Authentifié maison à celui par défaut
parent 976cee15
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -4,11 +4,10 @@ namespace UnicaenAuth\Provider\Identity;

use BjyAuthorize\Provider\Identity\ProviderInterface;
use BjyAuthorize\Service\Authorize;
use UnicaenAuth\Service\UserContext;
use Laminas\EventManager\EventManagerAwareInterface;
use Laminas\EventManager\EventManagerAwareTrait;
use Laminas\Permissions\Acl\Role\Registry;
use Laminas\Permissions\Acl\Role\RoleInterface;
use UnicaenAuth\Service\UserContext;

/**
 * Chaîne de responsabilité permettant à plusieures sources de fournir
@@ -104,20 +103,18 @@ class Chain implements ProviderInterface, EventManagerAwareInterface
        $this->getEventManager()->triggerEvent($e);
        $roles = $e->getRoles(); /** @var RoleInterface[] $roles */

        $registry = new Registry();
        foreach ($roles as $role) {
            // ne retient que les rôles déclarés dans les ACL
            if (!$this->authorizeService->getAcl()->hasRole($role)) {
                continue;
            }
            // évite les doublons
            if (!$registry->has($role)) {
            if (is_string($role)) {
                $role = $this->authorizeService->getAcl()->getRole($role);
            }
                $registry->add($role);
            // collecte en évitant les doublons
            $this->roles[$role->getRoleId()] = $role;
            }
            // NB : À condition que les 'identity providers' soient dans le bon ordre, cela permet à l'appli
            // de substituer son rôle "Authentifié" maison à celui par défaut.
        }

        return $this->roles;
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ class ChainEvent extends Event
        if ($roles instanceof Traversable) {
            $roles = iterator_to_array($roles);
        }
        $this->roles = array_merge($this->roles, $roles);
        $this->roles = array_unique(array_merge($this->roles, $roles));
        return $this;
    }