Commit ca921e67 authored by David Surville's avatar David Surville
Browse files

Merge branch 'master' of https://git.unicaen.fr/lib/unicaen/auth

parents ebe17fd7 cb8ef280
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -50,10 +50,8 @@ class UtilisateurController extends AbstractActionController
        }

        if ($addFlashMessage) {
            $message = sprintf(
                "Vous endossez à présent le profil utilisateur <strong>%s</strong>.",
                $this->getAuthUserContextService()->getSelectedIdentityRole()->getRoleId()
            );
            $selectedRole = $this->getAuthUserContextService()->getSelectedIdentityRoleToString();
            $message = sprintf("Vous endossez à présent le profil utilisateur <strong>%s</strong>.", $selectedRole);
            $this->flashMessenger()->setNamespace('UnicaenAuth/success')->addMessage($message);
        }

+42 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenAuth\Formatter;

use Zend\Permissions\Rbac\RoleInterface;

class RoleFormatter
{
    /**
     * Retourne le rôle utilisateur spécifié au format littéral.
     *
     * @param $role
     * @return string
     */
    public function format($role)
    {
        return $this->roleToString($role);
    }

    /**
     * Retourne le rôle utilisateur spécifié au format littéral.
     *
     * @param object|RoleInterface|string $role
     * @return string
     */
    private function roleToString($role)
    {
        $string = '?';

        if (is_object($role) && method_exists($role, '__toString')) {
            $string = (string) $role;
        }
        elseif ($role instanceof RoleInterface) {
            $string = $role->getRoleId();
        }
        elseif (is_string($role)) {
            $string = $role;
        }

        return $string;
    }
}
 No newline at end of file
+5 −4
Original line number Diff line number Diff line
<?php

namespace UnicaenAuth\Provider\Identity;

use BjyAuthorize\Provider\Identity\ProviderInterface;
@@ -76,7 +77,7 @@ class Chain implements ProviderInterface, ServiceLocatorAwareInterface, EventMan

        // collecte des rôles
        $this->getEventManager()->trigger('getIdentityRoles', $e);
        $roles = $e->getRoles();
        $roles = $e->getRoles(); /** @var RoleInterface[] $roles */

        $authorizeService = $this->getServiceLocator()->get('BjyAuthorize\Service\Authorize'); /* @var $authorizeService Authorize */

@@ -88,14 +89,14 @@ class Chain implements ProviderInterface, ServiceLocatorAwareInterface, EventMan
            }
            // évite les doublons
            if (!$registry->has($role)) {
                if (is_string($role)) {
                    $role = $authorizeService->getAcl()->getRole($role);
                }
                $registry->add($role);
                $this->roles[$role->getRoleId()] = $role;
            }
        }

//        var_dump($this->roles);

        return $this->roles;
    }

+53 −41
Original line number Diff line number Diff line
@@ -5,21 +5,21 @@ namespace UnicaenAuth\Service;
use BjyAuthorize\Acl\Role;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Traits\SessionContainerTrait;
use UnicaenAuth\Acl\NamedRole;
use UnicaenAuth\Entity\Ldap\People;
use UnicaenAuth\Entity\Shibboleth\ShibUser;
use UnicaenAuth\Event\UserRoleSelectedEvent;
use UnicaenAuth\Formatter\RoleFormatter;
use UnicaenAuth\Provider\Identity\Chain;
use Zend\EventManager\EventManagerAwareInterface;
use Zend\Session\Container as SessionContainer;
use Zend\EventManager\EventManagerAwareTrait;
use Zend\Permissions\Acl\Role\RoleInterface;
use ZfcUser\Entity\UserInterface;
use UnicaenAuth\Entity\Ldap\People;
use UnicaenAuth\Acl\NamedRole;
use Zend\EventManager\EventManagerAwareTrait;

/**
 * Service centralisant des méthodes utiles concernant l'utilisateur authentifié.
 *
 * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
 * @author Unicaen
 */
class UserContext extends AbstractService implements EventManagerAwareInterface
{
@@ -36,8 +36,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
     */
    protected $identityRoles;



    /**
     * Retourne l'utilisateur BDD courant
     *
@@ -54,8 +52,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return null;
    }



    /**
     * Retourne l'utilisateur LDAP courant
     *
@@ -72,8 +68,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return null;
    }



    /**
     * Retourne l'éventuel utilisateur Shibboleth courant.
     *
@@ -90,8 +84,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return null;
    }



    /**
     * Retourne les données d'identité correspondant à l'utilisateur courant.
     *
@@ -109,7 +101,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return $this->identity;
    }


    /**
     * Retourne l'identifiant de connexion de l'utilisateur courant.
     *
@@ -130,8 +121,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return null;
    }



    /**
     * @param string $roleId
     *
@@ -147,8 +136,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return null;
    }



    /**
     * Retourne tous les rôles de l'utilisateur courant, pas seulement le rôle courant sélectionné.
     *
@@ -164,15 +151,16 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
            $roles            = $this->getServiceAuthorize()->getRoles();
            $identityProvider = $this->getIdentityProvider();
            if ($identityProvider instanceof Chain) {
                $iRoles = $identityProvider->getAllIdentityRoles();
                $identityRoles = $identityProvider->getAllIdentityRoles();
            } else {
                $iRoles = $identityProvider->getIdentityRoles();
                $identityRoles = $identityProvider->getIdentityRoles();
            }
            foreach ($iRoles as $role) {
                if ($role instanceof Role) {
            foreach ($identityRoles as $role) {
                if ($role instanceof RoleInterface) {
                    $this->identityRoles[$role->getRoleId()] = $role;
                } elseif (isset($roles[$role])) {
                } elseif (is_string($role) && isset($roles[$role])) {
                    $role = $roles[$role];
                    /** @var RoleInterface $role */
                    $this->identityRoles[$role->getRoleId()] = $role;
                }
            }
@@ -181,7 +169,23 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return $this->identityRoles;
    }

    /**
     * Retourne tous les rôles de l'utilisateur courant au format littéral.
     *
     * @return array
     * @see getIdentityRoles()
     */
    public function getIdentityRolesToString()
    {
        $f = new RoleFormatter();
        $rolesToStrings = [];

        foreach ($this->getIdentityRoles() as $identityRole) {
            $rolesToStrings[$identityRole->getRoleId()] = $f->format($identityRole);
        }

        return $rolesToStrings;
    }

    /**
     * Retourne parmi tous les rôles de l'utilisateur courant ceux qui peuvent être sélectionnés.
@@ -198,8 +202,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return $roles;
    }



    /**
     * Si un utilisateur est authentifié, retourne le rôle utilisateur sélectionné,
     * ou alors le premier sélectionnable si aucun n'a été sélectionné.
@@ -207,11 +209,10 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
     * NB: Si un rôle est spécifié en session comme devant être le prochain rôle sélectionné,
     * c'est lui qui est pris en compte.
     *
     * @return mixed
     * @return RoleInterface
     */
    public function getSelectedIdentityRole()
    {

        if ($this->getNextSelectedIdentityRole()) {
            $this->getSessionContainer()->selectedIdentityRole = $this->getNextSelectedIdentityRole();
        }
@@ -222,10 +223,9 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        }

        $roleId = $this->getSessionContainer()->selectedIdentityRole;

        if ($roleId) {

            $roles = $this->getServiceAuthorize()->getRoles(); // Récupération de tous les rôles du provider
//            $roles = $this->getServiceAuthorize()->getRoles(); // Récupération de tous les rôles du provider
            $roles = $this->getIdentityRoles();
            if (isset($roles[$roleId])) {
                $role = $roles[$roleId];
            } else {
@@ -240,7 +240,24 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return null;
    }

    /**
     * Retourne le rôle utilisateur sélectionné éventuel au format littéral.
     *
     * @return string
     * @see getSelectedIdentityRole()
     */
    public function getSelectedIdentityRoleToString()
    {
        $role = $this->getSelectedIdentityRole();

        if (! $role) {
            return null;
        }

        $f = new RoleFormatter();

        return $f->format($role);
    }

    /**
     * Mémorise en session le rôle spécifié comme étant le rôle courant de l'utilisateur.
@@ -271,8 +288,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return $this;
    }



    /**
     * Retourne l'éventuel rôle spécifié en session devant être le prochain rôle sélectionné.
     *
@@ -283,8 +298,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return $this->getSessionContainer()->nextSelectedIdentityRole;
    }



    /**
     * Mémorise en session le rôle devant être le prochain rôle sélectionné.
     *
@@ -352,16 +365,15 @@ class UserContext extends AbstractService implements EventManagerAwareInterface
        return false;
    }



    /**
     *
     * @return \UnicaenAuth\Provider\Identity\Chain
     * @return Chain
     */
    private function getIdentityProvider()
    {
        return $this->getServiceAuthorize()->getIdentityProvider();
        /* @var $identityProvider \UnicaenAuth\Provider\Identity\Chain */
    }
        /* @var $identityProvider Chain */
        $identityProvider = $this->getServiceAuthorize()->getIdentityProvider();

        return $identityProvider;
    }
}
 No newline at end of file
+6 −45
Original line number Diff line number Diff line
<?php
namespace UnicaenAuth\View\Helper;

use Zend\Permissions\Acl\Role\RoleInterface;
namespace UnicaenAuth\View\Helper;

/**
 * Aide de vue permettant d'afficher le profil de l'utilisateur connecté.
@@ -15,17 +14,12 @@ class UserProfile extends UserAbstract
     */
    protected $userProfileSelectable = false;

    /**
     * @var array
     */
    protected $identityRoles;

    /**
     * Point d'entrée.
     *
     * @param bool $userProfileSelectable Spécifie s'il faut afficher les profils
     * de l'utilisateur sous forme d'une liste déroulante ou de boutons radios, permettant
     * ainsi à l'utilisateur de changer de profil courant.
     *                                    de l'utilisateur sous forme d'une liste déroulante ou de boutons radios,
     *                                    permettant ainsi à l'utilisateur de changer de profil courant.
     * @return self
     */
    public function __invoke($userProfileSelectable = false)
@@ -62,8 +56,7 @@ class UserProfile extends UserAbstract

        if ($this->userProfileSelectable) {
            $html .= $this->getView()->userProfileSelect(false);
        }
        else {
        } else {
            $html .= $this->getView()->htmlList($roles);
        }

@@ -80,19 +73,6 @@ class UserProfile extends UserAbstract
        return $this->render();
    }

    /**
     * Retourne les rôles de l'utilisateur courant.
     *
     * @return array
     */
    protected function getIdentityRoles()
    {
        if (null === $this->identityRoles) {
            $this->identityRoles = $this->getUserContext()->getIdentityRoles();
        }
        return $this->identityRoles;
    }

    /**
     * Retourne les rôles de l'utilisateur courant.
     *
@@ -100,27 +80,7 @@ class UserProfile extends UserAbstract
     */
    protected function getIdentityRolesAsOptions()
    {
        $identityRoles = $this->getIdentityRoles();
        $roles         = [];

        foreach ($identityRoles as $id => $role) {
            $lib = '?';
            if (is_object($role) && method_exists($role, '__toString')) {
                $lib = (string) $role;
            }
            elseif ($role instanceof RoleInterface) {
                $lib = $role->getRoleId();
            }
            elseif (is_string($role)) {
                $lib = $role;
            }
            if ($this->getTranslator()) {
                $lib = $this->getTranslator()->translate($lib, $this->getTranslatorTextDomain());
            }
            $roles[$id] = $lib;
        }

        return $roles;
        return $this->getUserContext()->getIdentityRolesToString();
    }

    /**
@@ -134,6 +94,7 @@ class UserProfile extends UserAbstract
    public function setUserProfileSelectable($userProfileSelectable = true)
    {
        $this->userProfileSelectable = $userProfileSelectable;

        return $this;
    }
}
 No newline at end of file