Commit 81ccb133 authored by Laurent Lécluse's avatar Laurent Lécluse
Browse files

Possibilité de retourner la liste de tous les rôles issus de l'ensemble des...

Possibilité de retourner la liste de tous les rôles issus de l'ensemble des fournisseurs de rôles depuis le service Authorize "augmenté".

Utilisation de la liste pour retrouver un rôle à partir de son ID dans le UserContext.
parent b2842c20
......@@ -20,7 +20,7 @@ abstract class AbstractService implements ServiceLocatorAwareInterface
/**
* @return \BjyAuthorize\Service\Authorize
* @return \UnicaenAuth\Service\AuthorizeService
*/
protected function getServiceAuthorize()
{
......
......@@ -2,11 +2,12 @@
/**
* BjyAuthorize Module (https://github.com/bjyoungblood/BjyAuthorize)
*
* @link https://github.com/bjyoungblood/BjyAuthorize for the canonical source repository
* @link https://github.com/bjyoungblood/BjyAuthorize for the canonical source repository
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace UnicaenAuth\Service;
use UnicaenAuth\Service\Traits\UserContextServiceAwareTrait;
/**
......@@ -26,11 +27,14 @@ class AuthorizeService extends \BjyAuthorize\Service\Authorize
protected $loading;
public function getServiceLocator()
{
return $this->serviceLocator;
}
/**
* @deprecated this method will be removed in BjyAuthorize 1.4.x+,
* please retrieve the identity from the
......@@ -42,9 +46,30 @@ class AuthorizeService extends \BjyAuthorize\Service\Authorize
{
$this->loaded && $this->loaded->__invoke();
if ($this->loading) return 'bjyauthorize-identity';
return $this->getServiceUserContext()->getSelectedIdentityRole();
}
/**
* Retourne la liste des rôles fournis par l'ensemble des providers
*/
public function getRoles()
{
$roles = [];
foreach ($this->roleProviders as $provider) {
$r = $provider->getRoles();
foreach ($r as $role) {
$roles[$role->getRoleId()] = $role;
}
}
return $roles;
}
/**
* Initializes the service
*
......
......@@ -2,6 +2,7 @@
namespace UnicaenAuth\Service;
use BjyAuthorize\Acl\Role;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Traits\SessionContainerTrait;
use UnicaenAuth\Provider\Identity\Chain;
......@@ -95,10 +96,10 @@ class UserContext extends AbstractService
public function getIdentityRoles()
{
if (null === $this->identityRoles) {
$identityProvider = $this->getIdentityProvider();
if ($identityProvider instanceof Chain){
$identityProvider = $this->getIdentityProvider();
if ($identityProvider instanceof Chain) {
$this->identityRoles = $identityProvider->getAllIdentityRoles();
}else{
} else {
$this->identityRoles = $identityProvider->getIdentityRoles();
}
}
......@@ -136,6 +137,7 @@ class UserContext extends AbstractService
*/
public function getSelectedIdentityRole()
{
if ($this->getNextSelectedIdentityRole()) {
$this->getSessionContainer()->selectedIdentityRole = $this->getNextSelectedIdentityRole();
}
......@@ -147,8 +149,15 @@ class UserContext extends AbstractService
$roleId = $this->getSessionContainer()->selectedIdentityRole;
if ($roleId){
$role = $this->normalizedIdentityRole($roleId);
if ($roleId) {
$roles = $this->getServiceAuthorize()->getRoles(); // Récupération de tous les rôles du provider
if (isset($roles[$roleId])) {
$role = $roles[$roleId];
}else{
$role = null;
}
if ($this->isRoleValid($role)) {
return $role;
}
......@@ -227,33 +236,6 @@ class UserContext extends AbstractService
/**
* Recherche le role spécifié parmi les rôles connus au format objets.
*
* @param RoleInterface|string $role
*
* @return RoleInterface Role trouvé au format objet dans la mesure du possible
*/
protected function normalizedIdentityRole($role)
{
if (!$role || is_object($role)) {
return $role;
}
foreach ($this->getIdentityRoles() as $r) {
if ($r instanceof RoleInterface && $role === $r->getRoleId()) {
return $r;
}
if ($role === $r) {
return $r;
}
}
return $role;
}
/**
* Teste si le rôle spécifié fait partie des rôles disponibles.
*
......
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