diff --git a/config/module.config.php b/config/module.config.php index 6df519b0e13fc2b6d30ff31fa3b10f105c45944b..cb7bec104386b8f2768df286d4bbaa8a8598d091 100644 --- a/config/module.config.php +++ b/config/module.config.php @@ -1,6 +1,12 @@ <?php $settings = array( - + /** + * Fournisseurs d'identité. + */ + 'identity_providers' => array( + 200 => 'UnicaenAuth\Provider\Identity\Db', + 100 => 'UnicaenAuth\Provider\Identity\Ldap', + ), ); $zfcuserSettings = array( diff --git a/src/UnicaenAuth/Provider/Identity/Chain.php b/src/UnicaenAuth/Provider/Identity/Chain.php index 074291d2b0dce5098320f73a14ed5f5918160f73..1ce6fe35e893415ceef61844ab55a3e9019ff52a 100644 --- a/src/UnicaenAuth/Provider/Identity/Chain.php +++ b/src/UnicaenAuth/Provider/Identity/Chain.php @@ -2,12 +2,11 @@ namespace UnicaenAuth\Provider\Identity; use BjyAuthorize\Provider\Identity\ProviderInterface; -use Zend\EventManager\EventManager; use Zend\EventManager\EventManagerAwareInterface; -use Zend\EventManager\EventManagerInterface; +use Zend\EventManager\EventManagerAwareTrait; use Zend\Permissions\Acl\Role\RoleInterface; use Zend\ServiceManager\ServiceLocatorAwareInterface; -use Zend\ServiceManager\ServiceLocatorInterface; +use Zend\ServiceManager\ServiceLocatorAwareTrait; /** * Chaîne de responsabilité permettant à plusieures sources de fournir @@ -19,15 +18,8 @@ use Zend\ServiceManager\ServiceLocatorInterface; */ class Chain implements ProviderInterface, ServiceLocatorAwareInterface, EventManagerAwareInterface { - /** - * @var ServiceLocatorAwareInterface - */ - protected $serviceLocator; - - /** - * @var EventManagerInterface - */ - protected $eventManager; + use ServiceLocatorAwareTrait; + use EventManagerAwareTrait; /** * @var ChainEvent @@ -82,57 +74,6 @@ class Chain implements ProviderInterface, ServiceLocatorAwareInterface, EventMan return $this->roles; } - /** - * Inject an EventManager instance - * - * @param EventManagerInterface $eventManager - * @return self - */ - public function setEventManager(EventManagerInterface $eventManager) - { - $eventManager->setIdentifiers(array( - __CLASS__, - get_called_class(), - )); - $this->eventManager = $eventManager; - return $this; - } - - /** - * Get the EventManager instance - * - * @return EventManagerInterface - */ - public function getEventManager() - { - if (null === $this->eventManager) { - $this->setEventManager(new EventManager()); - } - return $this->eventManager; - } - - /** - * Set service locator - * - * @param ServiceLocatorInterface $serviceLocator - * @return self - */ - public function setServiceLocator(ServiceLocatorInterface $serviceLocator) - { - $this->serviceLocator = $serviceLocator; - return $this; - } - - /** - * Get service locator - * - * @return ServiceLocatorInterface - */ - public function getServiceLocator() - { - return $this->serviceLocator; - } - /** * * @return ChainEvent diff --git a/src/UnicaenAuth/Provider/Identity/ChainServiceFactory.php b/src/UnicaenAuth/Provider/Identity/ChainServiceFactory.php index 6f5ba726303037a622d3ee90eb9c6a5d733718d5..01a5f8f92fc98521eb2274c78dd2fafeebe0e061 100644 --- a/src/UnicaenAuth/Provider/Identity/ChainServiceFactory.php +++ b/src/UnicaenAuth/Provider/Identity/ChainServiceFactory.php @@ -5,7 +5,7 @@ use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; /** - * Description of CcainIdentityProviderServiceFactory + * Intsancie une chaîne de fournisseurs d'identité. * * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> */ @@ -19,17 +19,19 @@ class ChainServiceFactory implements FactoryInterface */ public function createService(ServiceLocatorInterface $serviceLocator) { - $providers = array( - 200 => 'UnicaenAuth\Provider\Identity\Db', - 100 => 'UnicaenAuth\Provider\Identity\Ldap', - ); + $config = $serviceLocator->get('Config'); //'unicaen-auth_module_options' + if (!isset($config['unicaen-auth']['identity_providers']) || !$config['unicaen-auth']['identity_providers']) { + throw new \UnicaenApp\Exception\RuntimeException("Aucun fournisseur d'identité spécifié dans la config."); + } + + $providers = (array) $config['unicaen-auth']['identity_providers']; $chain = new Chain(); $chain->setServiceLocator($serviceLocator); foreach ($providers as $priority => $name) { $provider = $serviceLocator->get($name); - $chain->getEventManager()->attach('getIdentityRoles', array($provider, 'getIdentityRolesTrigger'), $priority); + $chain->getEventManager()->attach('getIdentityRoles', array($provider, 'injectIdentityRoles'), $priority); } return $chain; diff --git a/src/UnicaenAuth/Provider/Identity/ChainableProvider.php b/src/UnicaenAuth/Provider/Identity/ChainableProvider.php index 30d4f3417f782a1c21db1cf7845776758de7e3c2..3a101e231a5a2d3241b3af27b3838edeaf2f5974 100644 --- a/src/UnicaenAuth/Provider/Identity/ChainableProvider.php +++ b/src/UnicaenAuth/Provider/Identity/ChainableProvider.php @@ -5,9 +5,9 @@ namespace UnicaenAuth\Provider\Identity; interface ChainableProvider { /** - * Retrieve roles for the current identity + * Injecte les rôles que possède l'identité authentifiée courante. * - * @param ChainEvent $event + * @param ChainEvent $e */ - public function getIdentityRolesTrigger(ChainEvent $e); + public function injectIdentityRoles(ChainEvent $e); } \ No newline at end of file diff --git a/src/UnicaenAuth/Provider/Identity/Db.php b/src/UnicaenAuth/Provider/Identity/Db.php index ea5747e00f2fe549d574f5fd89d9c1b186d26050..35df9cfc10778758ed659bd23996321eb24789a0 100644 --- a/src/UnicaenAuth/Provider/Identity/Db.php +++ b/src/UnicaenAuth/Provider/Identity/Db.php @@ -21,7 +21,7 @@ class Db extends AuthenticationIdentityProvider implements ChainableProvider /** * {@inheritDoc} */ - public function getIdentityRolesTrigger(ChainEvent $event) + public function injectIdentityRoles(ChainEvent $event) { $event->addRoles($this->getIdentityRoles()); } diff --git a/src/UnicaenAuth/Provider/Identity/Ldap.php b/src/UnicaenAuth/Provider/Identity/Ldap.php index 647b841e6192dbf07f258e5e77789704c635c121..e28ab2d2f07bb6c02663403b442b447c2b323390 100644 --- a/src/UnicaenAuth/Provider/Identity/Ldap.php +++ b/src/UnicaenAuth/Provider/Identity/Ldap.php @@ -1,7 +1,6 @@ <?php namespace UnicaenAuth\Provider\Identity; -use UnicaenAuth\Entity\Ldap\People; use BjyAuthorize\Provider\Identity\AuthenticationIdentityProvider; use BjyAuthorize\Provider\Role\ProviderInterface; use ZfcUser\Entity\UserInterface; @@ -16,12 +15,12 @@ use ZfcUser\Entity\UserInterface; * * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> */ -class Ldap extends AuthenticationIdentityProvider implements ChainableProvider//, ServiceLocatorAwareInterface +class Ldap extends AuthenticationIdentityProvider implements ChainableProvider { /** * {@inheritDoc} */ - public function getIdentityRolesTrigger(ChainEvent $event) + public function injectIdentityRoles(ChainEvent $event) { $event->addRoles($this->getIdentityRoles()); }