[Beeframework-svn] SF.net SVN: beeframework:[75] trunk/framework/Bee
Brought to you by:
b_hartmann,
m_plomer
From: <m_p...@us...> - 2013-09-01 21:29:50
|
Revision: 75 http://sourceforge.net/p/beeframework/code/75 Author: m_plomer Date: 2013-09-01 21:29:45 +0000 (Sun, 01 Sep 2013) Log Message: ----------- - convenience UserDetails impl based on Doctrine 2 - Doctrine 2 ConnectionAugmenter Added Paths: ----------- trunk/framework/Bee/Persistence/Doctrine2/ConnectionAugmenter.php trunk/framework/Bee/Security/UserDetails/ trunk/framework/Bee/Security/UserDetails/Doctrine2/ trunk/framework/Bee/Security/UserDetails/Doctrine2/SimpleUser.php trunk/framework/Bee/Security/UserDetails/Doctrine2/SimpleUserDetailsService.php Added: trunk/framework/Bee/Persistence/Doctrine2/ConnectionAugmenter.php =================================================================== --- trunk/framework/Bee/Persistence/Doctrine2/ConnectionAugmenter.php (rev 0) +++ trunk/framework/Bee/Persistence/Doctrine2/ConnectionAugmenter.php 2013-09-01 21:29:45 UTC (rev 75) @@ -0,0 +1,49 @@ +<?php +namespace Bee\Persistence\Doctrine2; +use Doctrine\Common\EventSubscriber; +use Doctrine\DBAL\Event\ConnectionEventArgs; +use Doctrine\DBAL\Events; + + +/** + * Class ConnectionAugmenter + * @package Bee\Persistence\Doctrine2 + */ +class ConnectionAugmenter implements EventSubscriber { + + /** + * @var string + */ + private $postConnectScript; + + /** + * @param string $postConnectScript + */ + public function setPostConnectScript($postConnectScript) { + $this->postConnectScript = $postConnectScript; + } + + /** + * @return string + */ + public function getPostConnectScript() { + return $this->postConnectScript; + } + + /** + * Returns an array of events this subscriber wants to listen to. + * + * @return array + */ + public function getSubscribedEvents() { + return array(Events::postConnect); + } + + public function postConnect(ConnectionEventArgs $eventArgs) { + $eventArgs->getConnection()->beginTransaction(); + if(\Bee_Utils_Strings::hasText($this->getPostConnectScript())) { + $eventArgs->getConnection()->exec($this->getPostConnectScript()); + } + $eventArgs->getConnection()->commit(); + } +} \ No newline at end of file Added: trunk/framework/Bee/Security/UserDetails/Doctrine2/SimpleUser.php =================================================================== --- trunk/framework/Bee/Security/UserDetails/Doctrine2/SimpleUser.php (rev 0) +++ trunk/framework/Bee/Security/UserDetails/Doctrine2/SimpleUser.php 2013-09-01 21:29:45 UTC (rev 75) @@ -0,0 +1,156 @@ +<?php +namespace Bee\Security\UserDetails\Doctrine2; +use Bee_Security_IGrantedAuthority; +use Bee_Security_IUserDetails; + +/** + * Base class for user entities - also usable as simple user entity (WIP) + * @package Bee\Security\UserDetails\Doctrine2 + * @Entity + * @Table(name="bee_security_user") + */ +class SimpleUser implements Bee_Security_IUserDetails { + + /** + * @var integer + * + * @Id + * @GeneratedValue + * @Column(type="integer") + */ + private $id; + + /** + * @var string + * @Column(name="username", type="string", length=20, nullable=false) + */ + private $username; + + /** + * @var string + * @Column(name="password", type="string", length=20, nullable=false) + */ + private $password; + + /** + * @var boolean + * @Column(name="disabled", type="boolean", nullable=false) + */ + private $disabled = false; + + /** + * @var string + * @Column(name="name", type="string", length=200, nullable=true) + */ + private $name; + + /** + * Get the identifier + * + * @return integer + */ + public function getId() { + return $this->id; + } + + + /** + * Returns the authorities granted to the user. Cannot return <code>null</code>. + * + * @return Bee_Security_IGrantedAuthority[] the authorities, sorted by natural key (never <code>null</code>) + */ + function getAuthorities() { + return array(); + } + + /** + * Returns the password used to authenticate the user. Cannot return <code>null</code>. + * + * @return String the password (never <code>null</code>) + */ + function getPassword() { + return $this->password; + } + + /** + * @param string $password + */ + public function setPassword($password) { + $this->password = $password; + } + + /** + * Returns the username used to authenticate the user. Cannot return <code>null</code>. + * + * @return String the username (never <code>null</code>) + */ + public function getUsername() { + return $this->username; + } + + /** + * @param string $username + */ + public function setUsername($username) { + $this->username = $username; + } + + /** + * Indicates whether the user's account has expired. An expired account cannot be authenticated. + * + * @return boolean <code>true</code> if the user's account is valid (ie non-expired), <code>false</code> if no longer valid + * (ie expired) + */ + public function isAccountNonExpired() { + return true; + } + + /** + * Indicates whether the user is locked or unlocked. A locked user cannot be authenticated. + * + * @return boolean <code>true</code> if the user is not locked, <code>false</code> otherwise + */ + public function isAccountNonLocked() { + return true; + } + + /** + * Indicates whether the user's credentials (password) has expired. Expired credentials prevent + * authentication. + * + * @return boolean <code>true</code> if the user's credentials are valid (ie non-expired), <code>false</code> if no longer + * valid (ie expired) + */ + public function isCredentialsNonExpired() { + return true; + } + + /** + * Indicates whether the user is enabled or disabled. A disabled user cannot be authenticated. + * + * @return boolean <code>true</code> if the user is enabled, <code>false</code> otherwise + */ + public function isEnabled() { + return !$this->getDisabled(); + } + + /** + * @return boolean + */ + public function getDisabled() { + return $this->disabled; + } + + /** + * @param boolean $disabled + */ + public function setDisabled($disabled) { + $this->disabled = $disabled; + } + + public function __toString() { + return $this->getUsername(); + } +} + + Added: trunk/framework/Bee/Security/UserDetails/Doctrine2/SimpleUserDetailsService.php =================================================================== --- trunk/framework/Bee/Security/UserDetails/Doctrine2/SimpleUserDetailsService.php (rev 0) +++ trunk/framework/Bee/Security/UserDetails/Doctrine2/SimpleUserDetailsService.php 2013-09-01 21:29:45 UTC (rev 75) @@ -0,0 +1,72 @@ +<?php +namespace Bee\Security\UserDetails\Doctrine2; +use Bee_Security_Exception_UsernameNotFound; +use Bee_Security_IUserDetails; +use Bee_Security_IUserDetailsService; +use Doctrine\ORM\EntityManager; +use Doctrine\ORM\NoResultException; + +/** + * Class SimpleUserDetailsService + * @package Bee\Security\UserDetails\Doctrine2 + */ +class SimpleUserDetailsService implements Bee_Security_IUserDetailsService { + + /** + * @var EntityManager + */ + private $entityManager; + + /** + * @var string + */ + private $userEntityName = 'Bee\Tools\Security\Auth\Doctrine2\SimpleUser'; + + /** + * Locates the user based on the username. In the actual implementation, the search may possibly be case + * insensitive, or case insensitive depending on how the implementaion instance is configured. In this case, the + * <code>Bee_Security_IUserDetails</code> object that comes back may have a username that is of a different case + * than what was actually requested. + * + * @param $username + * @throws \Bee_Security_Exception_UsernameNotFound + * @return Bee_Security_IUserDetails a fully populated user record (never <code>null</code>) + */ + function loadUserByUsername($username) { + try { + return $this->entityManager + ->createQuery('SELECT u FROM ' . $this->getUserEntityName() . ' u WHERE u.username = :username') + ->setParameter('username', $username)->getSingleResult(); + } catch (NoResultException $e) { + throw new Bee_Security_Exception_UsernameNotFound('User name ' . $username . ' not found', null, $e); + } + } + + /** + * @param EntityManager $entityManager + */ + public function setEntityManager(EntityManager $entityManager) { + $this->entityManager = $entityManager; + } + + /** + * @return EntityManager + */ + public function getEntityManager() { + return $this->entityManager; + } + + /** + * @param string $userEntityName + */ + public function setUserEntityName($userEntityName) { + $this->userEntityName = $userEntityName; + } + + /** + * @return string + */ + public function getUserEntityName() { + return $this->userEntityName; + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |