diff -r 000000000000 -r 7f95f8617b0b vendor/symfony/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/symfony/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,87 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\Doctrine\Security\User; + +use Doctrine\ORM\EntityManager; +use Symfony\Component\Security\Core\Exception\UnsupportedUserException; +use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; +use Symfony\Component\Security\Core\User\UserProviderInterface; +use Symfony\Component\Security\Core\User\UserInterface; + +/** + * Wrapper around a Doctrine EntityManager. + * + * Provides easy to use provisioning for Doctrine entity users. + * + * @author Fabien Potencier + * @author Johannes M. Schmitt + */ +class EntityUserProvider implements UserProviderInterface +{ + private $class; + private $repository; + private $property; + + public function __construct(EntityManager $em, $class, $property = null) + { + $this->class = $class; + + if (false !== strpos($this->class, ':')) { + $this->class = $em->getClassMetadata($class)->name; + } + + $this->repository = $em->getRepository($class); + $this->property = $property; + } + + /** + * {@inheritdoc} + */ + public function loadUserByUsername($username) + { + if (null !== $this->property) { + $user = $this->repository->findOneBy(array($this->property => $username)); + } else { + if (!$this->repository instanceof UserProviderInterface) { + throw new \InvalidArgumentException(sprintf('The Doctrine repository "%s" must implement UserProviderInterface.', get_class($this->repository))); + } + + $user = $this->repository->loadUserByUsername($username); + } + + if (null === $user) { + throw new UsernameNotFoundException(sprintf('User "%s" not found.', $username)); + } + + return $user; + } + + /** + * {@inheritDoc} + */ + public function refreshUser(UserInterface $user) + { + if (!$user instanceof $this->class) { + throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user))); + } + + return $this->loadUserByUsername($user->getUsername()); + } + + /** + * {@inheritDoc} + */ + public function supportsClass($class) + { + return $class === $this->class; + } +}