Loading src/UnicaenAuth/Controller/UtilisateurController.php +2 −4 Original line number Diff line number Diff line Loading @@ -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); } Loading src/UnicaenAuth/Formatter/RoleFormatter.php 0 → 100644 +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 src/UnicaenAuth/Provider/Identity/Chain.php +5 −4 Original line number Diff line number Diff line <?php namespace UnicaenAuth\Provider\Identity; use BjyAuthorize\Provider\Identity\ProviderInterface; Loading Loading @@ -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 */ Loading @@ -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; } Loading src/UnicaenAuth/Service/UserContext.php +53 −41 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -36,8 +36,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface */ protected $identityRoles; /** * Retourne l'utilisateur BDD courant * Loading @@ -54,8 +52,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return null; } /** * Retourne l'utilisateur LDAP courant * Loading @@ -72,8 +68,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return null; } /** * Retourne l'éventuel utilisateur Shibboleth courant. * Loading @@ -90,8 +84,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return null; } /** * Retourne les données d'identité correspondant à l'utilisateur courant. * Loading @@ -109,7 +101,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return $this->identity; } /** * Retourne l'identifiant de connexion de l'utilisateur courant. * Loading @@ -130,8 +121,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return null; } /** * @param string $roleId * Loading @@ -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é. * Loading @@ -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; } } Loading @@ -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. Loading @@ -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é. Loading @@ -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(); } Loading @@ -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 { Loading @@ -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. Loading Loading @@ -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é. * Loading @@ -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é. * Loading Loading @@ -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 src/UnicaenAuth/View/Helper/UserProfile.php +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é. Loading @@ -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) Loading Loading @@ -62,8 +56,7 @@ class UserProfile extends UserAbstract if ($this->userProfileSelectable) { $html .= $this->getView()->userProfileSelect(false); } else { } else { $html .= $this->getView()->htmlList($roles); } Loading @@ -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. * Loading @@ -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(); } /** Loading @@ -134,6 +94,7 @@ class UserProfile extends UserAbstract public function setUserProfileSelectable($userProfileSelectable = true) { $this->userProfileSelectable = $userProfileSelectable; return $this; } } No newline at end of file Loading
src/UnicaenAuth/Controller/UtilisateurController.php +2 −4 Original line number Diff line number Diff line Loading @@ -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); } Loading
src/UnicaenAuth/Formatter/RoleFormatter.php 0 → 100644 +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
src/UnicaenAuth/Provider/Identity/Chain.php +5 −4 Original line number Diff line number Diff line <?php namespace UnicaenAuth\Provider\Identity; use BjyAuthorize\Provider\Identity\ProviderInterface; Loading Loading @@ -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 */ Loading @@ -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; } Loading
src/UnicaenAuth/Service/UserContext.php +53 −41 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -36,8 +36,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface */ protected $identityRoles; /** * Retourne l'utilisateur BDD courant * Loading @@ -54,8 +52,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return null; } /** * Retourne l'utilisateur LDAP courant * Loading @@ -72,8 +68,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return null; } /** * Retourne l'éventuel utilisateur Shibboleth courant. * Loading @@ -90,8 +84,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return null; } /** * Retourne les données d'identité correspondant à l'utilisateur courant. * Loading @@ -109,7 +101,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return $this->identity; } /** * Retourne l'identifiant de connexion de l'utilisateur courant. * Loading @@ -130,8 +121,6 @@ class UserContext extends AbstractService implements EventManagerAwareInterface return null; } /** * @param string $roleId * Loading @@ -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é. * Loading @@ -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; } } Loading @@ -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. Loading @@ -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é. Loading @@ -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(); } Loading @@ -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 { Loading @@ -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. Loading Loading @@ -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é. * Loading @@ -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é. * Loading Loading @@ -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
src/UnicaenAuth/View/Helper/UserProfile.php +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é. Loading @@ -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) Loading Loading @@ -62,8 +56,7 @@ class UserProfile extends UserAbstract if ($this->userProfileSelectable) { $html .= $this->getView()->userProfileSelect(false); } else { } else { $html .= $this->getView()->htmlList($roles); } Loading @@ -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. * Loading @@ -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(); } /** Loading @@ -134,6 +94,7 @@ class UserProfile extends UserAbstract public function setUserProfileSelectable($userProfileSelectable = true) { $this->userProfileSelectable = $userProfileSelectable; return $this; } } No newline at end of file