Commit f592fe49 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Correction bugs.

parent ea78ac99
...@@ -106,9 +106,10 @@ class UserContext implements ServiceLocatorAwareInterface ...@@ -106,9 +106,10 @@ class UserContext implements ServiceLocatorAwareInterface
*/ */
public function getSelectableIdentityRoles() public function getSelectableIdentityRoles()
{ {
return array_filter( $filter = function($r) { return !($r instanceof NamedRole && !$r->getSelectable()); };
$this->getIdentityRoles(), $roles = array_filter($this->getIdentityRoles(), $filter);
function($r) { return !($r instanceof NamedRole && !$r->getSelectable()); });
return $roles;
} }
/** /**
...@@ -122,17 +123,18 @@ class UserContext implements ServiceLocatorAwareInterface ...@@ -122,17 +123,18 @@ class UserContext implements ServiceLocatorAwareInterface
if (null === $this->getSessionContainer()->selectedIdentityRole) { if (null === $this->getSessionContainer()->selectedIdentityRole) {
if ($this->getIdentity()) { if ($this->getIdentity()) {
$roles = $this->getSelectableIdentityRoles(); $roles = $this->getSelectableIdentityRoles();
$this->getSessionContainer()->selectedIdentityRole = reset($roles) ?: null; $this->setSelectedIdentityRole(reset($roles));
} }
} }
return $this->getSessionContainer()->selectedIdentityRole; return $this->normalizedIdentityRole($this->getSessionContainer()->selectedIdentityRole);
} }
/** /**
* Mémorise le rôle courant de l'utilisateur. * Mémorise en session le rôle spécifié comme étant le rôle courant de l'utilisateur.
* NB: seul l'id du rôle est mémorisé en session.
* *
* @param mixed $role * @param RoleInterface|string $role
* @return \UnicaenAuth\Service\UserContext * @return \UnicaenAuth\Service\UserContext
*/ */
public function setSelectedIdentityRole($role) public function setSelectedIdentityRole($role)
...@@ -141,7 +143,10 @@ class UserContext implements ServiceLocatorAwareInterface ...@@ -141,7 +143,10 @@ class UserContext implements ServiceLocatorAwareInterface
if (!$this->isRoleValid($role)) { if (!$this->isRoleValid($role)) {
throw new \Common\Exception\RuntimeException("Rôle spécifié invalide."); throw new \Common\Exception\RuntimeException("Rôle spécifié invalide.");
} }
$this->getSessionContainer()->selectedIdentityRole = $this->normalizedIdentityRole($role); if ($role instanceof RoleInterface) {
$role = $role->getRoleId();
}
$this->getSessionContainer()->selectedIdentityRole = $role;
} }
else { else {
unset($this->getSessionContainer()->selectedIdentityRole); unset($this->getSessionContainer()->selectedIdentityRole);
...@@ -158,7 +163,7 @@ class UserContext implements ServiceLocatorAwareInterface ...@@ -158,7 +163,7 @@ class UserContext implements ServiceLocatorAwareInterface
*/ */
protected function normalizedIdentityRole($role) protected function normalizedIdentityRole($role)
{ {
if (is_object($role)) { if (!$role || is_object($role)) {
return $role; return $role;
} }
...@@ -182,6 +187,10 @@ class UserContext implements ServiceLocatorAwareInterface ...@@ -182,6 +187,10 @@ class UserContext implements ServiceLocatorAwareInterface
*/ */
protected function isRoleValid($role) protected function isRoleValid($role)
{ {
if ($role instanceof RoleInterface) {
$role = $role->getRoleId();
}
foreach ($this->getIdentityRoles() as $r) { foreach ($this->getIdentityRoles() as $r) {
if ($r instanceof RoleInterface) { if ($r instanceof RoleInterface) {
$r = $r->getRoleId(); $r = $r->getRoleId();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment