Skip to content
Snippets Groups Projects
Commit cb8ef280 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Meilleure prise en compte des rôles au format objet.

parent 5acda6a4
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
......
<?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
<?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;
}
......
......@@ -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
<?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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment