Loading src/UnicaenAuth/Event/Listener/AuthenticatedUserSavedAbstractListener.php 0 → 100644 +82 −0 Original line number Diff line number Diff line <?php namespace UnicaenAuth\Event\Listener; use Zend\EventManager\EventManagerInterface; use Zend\EventManager\ListenerAggregateInterface; use UnicaenAuth\Event\UserAuthenticatedEvent; /** * Classe abstraites pour les classes désirant scruter un événement déclenché lors de l'authentification * utilisateur. * * Événements disponibles : * - juste avant que l'entité utilisateur ne soit persistée. * * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> * @see UserAuthenticatedEvent */ abstract class AuthenticatedUserSavedAbstractListener implements ListenerAggregateInterface { /** * @var \Zend\Stdlib\CallbackHandler[] */ protected $listeners = array(); /** * @var \Doctrine\ORM\EntityManager */ protected $em; /** * * @param \Doctrine\ORM\EntityManager $em */ public function __construct(\Doctrine\ORM\EntityManager $em) { $this->em = $em; } /** * Renseigne les relations 'intervenant' et 'personnel' avant que l'objet soit persisté. * * @param Event $e */ abstract public function onUserAuthenticatedPrePersist(UserAuthenticatedEvent $e); /** * Attach one or more listeners * * Implementors may add an optional $priority argument; the EventManager * implementation will pass this to the aggregate. * * @param EventManagerInterface $events * * @return void */ public function attach(EventManagerInterface $events) { $sharedEvents = $events->getSharedManager(); $this->listeners[] = $sharedEvents->attach( 'UnicaenAuth\Service\User', UserAuthenticatedEvent::PRE_PERSIST, array($this, 'onUserAuthenticatedPrePersist'), 100); } /** * Detach all previously attached listeners * * @param EventManagerInterface $events * * @return void */ public function detach(EventManagerInterface $events) { foreach ($this->listeners as $index => $listener) { if ($events->detach($listener)) { unset($this->listeners[$index]); } } } } No newline at end of file src/UnicaenAuth/Event/UserAuthenticatedEvent.php 0 → 100644 +63 −0 Original line number Diff line number Diff line <?php namespace UnicaenAuth\Event; use UnicaenApp\Entity\Ldap\People; use Zend\EventManager\Event; use ZfcUser\Entity\UserInterface; /** * Classe des événements déclenchés lors de l'authentification de l'utilisateur. * * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> */ class UserAuthenticatedEvent extends Event { const PRE_PERSIST = 'prePersist'; const PARAM_DB_USER = 'db_user'; const PARAM_LDAP_USER = 'ldap_user'; /** * Retourne l'entité utilisateur issue de la base de données. * * @return UserInterface */ public function getDbUser() { return $this->getParam(self::PARAM_DB_USER); } /** * Retourne l'entité utilisateur issue de l'annuaire LDAP. * * @return People */ public function getLdapUser() { return $this->getParam(self::PARAM_LDAP_USER); } /** * Spécifie l'entité utilisateur issue de la base de données. * * @param UserInterface $dbUser * @return UserAuthenticatedEvent */ public function setDbUser(UserInterface $dbUser) { $this->setParam(self::PARAM_DB_USER, $dbUser); return $this; } /** * Spécifie l'entité utilisateur issue de l'annuaire LDAP. * * @param People $ldapUser * @return UserAuthenticatedEvent */ public function setLdapUser(People $ldapUser) { $this->setParam(self::PARAM_LDAP_USER, $ldapUser); return $this; } } No newline at end of file src/UnicaenAuth/Service/User.php +8 −4 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ use PDOException; use UnicaenApp\Exception; use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper; use UnicaenAuth\Options\ModuleOptions; use UnicaenAuth\Event\UserAuthenticatedEvent; use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceManagerAwareInterface; use Zend\EventManager\EventManagerAwareInterface; Loading Loading @@ -99,10 +100,13 @@ class User implements ServiceManagerAwareInterface, EventManagerAwareInterface $entity->setPassword('ldap'); $entity->setState(in_array('deactivated', ldap_explode_dn($ldapPeople->getDn(), 1)) ? 0 : 1); // trigger pre-persist event $event = new \Zend\EventManager\Event(self::EVENT_USER_AUTHENTICATED_PRE_PERSIST); $event->setTarget($this) ->setParams(array('entity' => $entity, 'ldapPeople' => $ldapPeople)); // déclenche l'événement donnant aux applications clientes l'opportunité de modifier l'entité // utilisateur avant qu'elle ne soit persistée $event = new UserAuthenticatedEvent(UserAuthenticatedEvent::PRE_PERSIST); $event ->setDbUser($entity) ->setLdapUser($ldapPeople) ->setTarget($this); $this->getEventManager()->trigger($event); // persist Loading Loading
src/UnicaenAuth/Event/Listener/AuthenticatedUserSavedAbstractListener.php 0 → 100644 +82 −0 Original line number Diff line number Diff line <?php namespace UnicaenAuth\Event\Listener; use Zend\EventManager\EventManagerInterface; use Zend\EventManager\ListenerAggregateInterface; use UnicaenAuth\Event\UserAuthenticatedEvent; /** * Classe abstraites pour les classes désirant scruter un événement déclenché lors de l'authentification * utilisateur. * * Événements disponibles : * - juste avant que l'entité utilisateur ne soit persistée. * * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> * @see UserAuthenticatedEvent */ abstract class AuthenticatedUserSavedAbstractListener implements ListenerAggregateInterface { /** * @var \Zend\Stdlib\CallbackHandler[] */ protected $listeners = array(); /** * @var \Doctrine\ORM\EntityManager */ protected $em; /** * * @param \Doctrine\ORM\EntityManager $em */ public function __construct(\Doctrine\ORM\EntityManager $em) { $this->em = $em; } /** * Renseigne les relations 'intervenant' et 'personnel' avant que l'objet soit persisté. * * @param Event $e */ abstract public function onUserAuthenticatedPrePersist(UserAuthenticatedEvent $e); /** * Attach one or more listeners * * Implementors may add an optional $priority argument; the EventManager * implementation will pass this to the aggregate. * * @param EventManagerInterface $events * * @return void */ public function attach(EventManagerInterface $events) { $sharedEvents = $events->getSharedManager(); $this->listeners[] = $sharedEvents->attach( 'UnicaenAuth\Service\User', UserAuthenticatedEvent::PRE_PERSIST, array($this, 'onUserAuthenticatedPrePersist'), 100); } /** * Detach all previously attached listeners * * @param EventManagerInterface $events * * @return void */ public function detach(EventManagerInterface $events) { foreach ($this->listeners as $index => $listener) { if ($events->detach($listener)) { unset($this->listeners[$index]); } } } } No newline at end of file
src/UnicaenAuth/Event/UserAuthenticatedEvent.php 0 → 100644 +63 −0 Original line number Diff line number Diff line <?php namespace UnicaenAuth\Event; use UnicaenApp\Entity\Ldap\People; use Zend\EventManager\Event; use ZfcUser\Entity\UserInterface; /** * Classe des événements déclenchés lors de l'authentification de l'utilisateur. * * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> */ class UserAuthenticatedEvent extends Event { const PRE_PERSIST = 'prePersist'; const PARAM_DB_USER = 'db_user'; const PARAM_LDAP_USER = 'ldap_user'; /** * Retourne l'entité utilisateur issue de la base de données. * * @return UserInterface */ public function getDbUser() { return $this->getParam(self::PARAM_DB_USER); } /** * Retourne l'entité utilisateur issue de l'annuaire LDAP. * * @return People */ public function getLdapUser() { return $this->getParam(self::PARAM_LDAP_USER); } /** * Spécifie l'entité utilisateur issue de la base de données. * * @param UserInterface $dbUser * @return UserAuthenticatedEvent */ public function setDbUser(UserInterface $dbUser) { $this->setParam(self::PARAM_DB_USER, $dbUser); return $this; } /** * Spécifie l'entité utilisateur issue de l'annuaire LDAP. * * @param People $ldapUser * @return UserAuthenticatedEvent */ public function setLdapUser(People $ldapUser) { $this->setParam(self::PARAM_LDAP_USER, $ldapUser); return $this; } } No newline at end of file
src/UnicaenAuth/Service/User.php +8 −4 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ use PDOException; use UnicaenApp\Exception; use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper; use UnicaenAuth\Options\ModuleOptions; use UnicaenAuth\Event\UserAuthenticatedEvent; use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceManagerAwareInterface; use Zend\EventManager\EventManagerAwareInterface; Loading Loading @@ -99,10 +100,13 @@ class User implements ServiceManagerAwareInterface, EventManagerAwareInterface $entity->setPassword('ldap'); $entity->setState(in_array('deactivated', ldap_explode_dn($ldapPeople->getDn(), 1)) ? 0 : 1); // trigger pre-persist event $event = new \Zend\EventManager\Event(self::EVENT_USER_AUTHENTICATED_PRE_PERSIST); $event->setTarget($this) ->setParams(array('entity' => $entity, 'ldapPeople' => $ldapPeople)); // déclenche l'événement donnant aux applications clientes l'opportunité de modifier l'entité // utilisateur avant qu'elle ne soit persistée $event = new UserAuthenticatedEvent(UserAuthenticatedEvent::PRE_PERSIST); $event ->setDbUser($entity) ->setLdapUser($ldapPeople) ->setTarget($this); $this->getEventManager()->trigger($event); // persist Loading