Commit 2d8707d2 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Création d'un initialisateur chargé d'injecter l'utilisateur courant dans les...

Création d'un initialisateur chargé d'injecter l'utilisateur courant dans les services en ayant besoin. 
Création des interfaces associées : DbUserAwareInterface et LdapUserAwareInterface.
parent c7ca12c0
......@@ -185,6 +185,9 @@ return array(
'UnicaenAuth\Provider\Role\DbRole' => 'UnicaenAuth\Provider\Role\DbRoleServiceFactory',
'UnicaenAuth\Provider\Role\Username' => 'UnicaenAuth\Provider\Role\UsernameServiceFactory',
),
'initializers' => array(
'UnicaenAuth\Service\UserAwareInitializer',
),
),
'controllers' => array(
'invokables' => array(
......
<?php
namespace UnicaenAuth\Service;
/**
* Interface spécifiant une dépendance avec un utilisateur issu d'une base de données.
*
* @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
*/
interface DbUserAwareInterface
{
/**
* Injecte l'utilisateur.
*
* @param UserInterface $user
*/
public function setDbUser(\ZfcUser\Entity\UserInterface $user);
/**
* Retourne l'utilisateur injecté.
*
* @return \ZfcUser\Entity\UserInterface
*/
public function getDbUser();
}
\ No newline at end of file
<?php
namespace UnicaenAuth\Service;
/**
* Interface spécifiant une dépendance avec un utilisateur issu de l'annuaire LDAP.
*
* @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
*/
interface LdapUserAwareInterface
{
/**
* Injecte l'utilisateur.
*
* @param People $user
*/
public function setLdapUser(\UnicaenAuth\Entity\Ldap\People $user);
/**
* Retourne l'utilisateur injecté.
*
* @return \UnicaenAuth\Entity\Ldap\People
*/
public function getLdapUser();
}
\ No newline at end of file
<?php
namespace UnicaenAuth\Service;
use Zend\ServiceManager\InitializerInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use UnicaenAuth\Service\DbUserAwareInterface;
use UnicaenAuth\Service\LdapUserAwareInterface;
use ZfcUser\Entity\UserInterface;
use UnicaenAuth\Entity\Ldap\People;
/**
* Initialisateur chargé d'injecter l'utilisateur courant dans les services en ayant besoin.
*
* @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
*/
class UserAwareInitializer implements InitializerInterface
{
/**
* Test d'éligibilité.
*
* @param mixed $instance
* @return bool
*/
protected function canInitialize($instance)
{
return $instance instanceof DbUserAwareInterface || $instance instanceof LdapUserAwareInterface;
}
/**
* Initialize
*
* @param mixed $instance
* @param ServiceLocatorInterface $serviceLocator
*/
public function initialize($instance, ServiceLocatorInterface $serviceLocator)
{
// test d'éligibilité à faire au plus tôt pour éviter l'erreur
// 'Circular dependency for LazyServiceLoader was found for instance Zend\Authentication\AuthenticationService'
if (!$this->canInitialize($instance)) {
return;
}
$authenticationService = $serviceLocator->get('Zend\Authentication\AuthenticationService');
if (!$authenticationService->hasIdentity()) {
return;
}
$identity = $authenticationService->getIdentity();
if ($instance instanceof DbUserAwareInterface) {
if (isset($identity['db']) && $identity['db'] instanceof UserInterface) {
$instance->setDbUser($identity['db']);
}
}
if ($instance instanceof LdapUserAwareInterface) {
if (isset($identity['ldap']) && $identity['ldap'] instanceof People) {
$instance->setLdapUser($identity['ldap']);
}
}
}
}
\ No newline at end of file
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