summaryrefslogtreecommitdiffstats
path: root/Core/User
diff options
context:
space:
mode:
authorJohannes Schmitt <schmittjoh@gmail.com>2011-02-16 02:53:32 +0100
committerFabien Potencier <fabien.potencier@gmail.com>2011-02-16 23:00:27 +0100
commit731a0ea0c8e1fc1889d796348a9b83762e2fd7d1 (patch)
treecc1d5d0593de032fc4805b8b68b24a8c72f20208 /Core/User
parent25816174d0898cbb53ac8df3da5e4989ad7fef63 (diff)
downloadsymfony-security-731a0ea0c8e1fc1889d796348a9b83762e2fd7d1.zip
symfony-security-731a0ea0c8e1fc1889d796348a9b83762e2fd7d1.tar.gz
symfony-security-731a0ea0c8e1fc1889d796348a9b83762e2fd7d1.tar.bz2
[Security] moved Security classes out of DoctrineBundle, cleaned-up SecurityExtension accordingly
Note that this commit removes the built-in support for MongoDB user providers. This code can be moved back in once there is a stable release for MongoDB, but for now you have to set-up that user provider just like you would set-up any custom user provider: security: providers: document_provider: id: my.mongo.provider
Diffstat (limited to 'Core/User')
-rw-r--r--Core/User/EntityUserProvider.php85
1 files changed, 85 insertions, 0 deletions
diff --git a/Core/User/EntityUserProvider.php b/Core/User/EntityUserProvider.php
new file mode 100644
index 0000000..89ff443
--- /dev/null
+++ b/Core/User/EntityUserProvider.php
@@ -0,0 +1,85 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Security\Core\User;
+
+use Doctrine\ORM\EntityManager;
+use Symfony\Component\Security\Core\Exception\UnsupportedAccountException;
+use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
+
+/**
+ * Wrapper around a Doctrine EntityManager.
+ *
+ * Provides easy to use provisioning for Doctrine entity users.
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ * @author Johannes M. Schmitt <schmittjoh@gmail.com>
+ */
+class EntityUserProvider implements UserProviderInterface
+{
+ protected $class;
+ protected $repository;
+ protected $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 loadUserByAccount(AccountInterface $account)
+ {
+ if (!$account instanceof $this->class) {
+ throw new UnsupportedAccountException(sprintf('Instances of "%s" are not supported.', get_class($account)));
+ }
+
+ return $this->loadUserByUsername($account->getUsername());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function supportsClass($class)
+ {
+ return $class === $this->class;
+ }
+}