vendor/pimcore/pimcore/lib/Security/User/ObjectUserProvider.php line 68

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Commercial License (PCL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  13.  */
  14. namespace Pimcore\Security\User;
  15. use Pimcore\Model\DataObject\AbstractObject;
  16. use Symfony\Component\Security\Core\Exception\InvalidArgumentException;
  17. use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
  18. use Symfony\Component\Security\Core\Exception\UserNotFoundException;
  19. use Symfony\Component\Security\Core\User\UserInterface;
  20. use Symfony\Component\Security\Core\User\UserProviderInterface;
  21. /**
  22.  * @internal
  23.  *
  24.  * User provider loading users from pimcore objects. To load users, the provider needs
  25.  * to know which kind of users to load (className) and which field to query for the
  26.  * username (usernameField).
  27.  *
  28.  * Example DI configuration loading from the App\Model\DataObject\User class and searching by username:
  29.  *
  30.  *      website_demo.security.user_provider:
  31.  *          class: Pimcore\Security\User\ObjectUserProvider
  32.  *          arguments: ['App\Model\DataObject\User', 'username']
  33.  */
  34. class ObjectUserProvider implements UserProviderInterface
  35. {
  36.     /**
  37.      * The pimcore class name to be used. Needs to be a fully qualified class
  38.      * name (e.g. Pimcore\Model\DataObject\User or your custom user class extending
  39.      * the generated one.
  40.      *
  41.      * @var string
  42.      */
  43.     protected $className;
  44.     /**
  45.      * @var string
  46.      */
  47.     protected $usernameField 'username';
  48.     /**
  49.      * @param string $className
  50.      * @param string $usernameField
  51.      */
  52.     public function __construct($className$usernameField 'username')
  53.     {
  54.         $this->setClassName($className);
  55.         $this->usernameField $usernameField;
  56.     }
  57.     /**
  58.      * @param string $className
  59.      */
  60.     protected function setClassName($className)
  61.     {
  62.         if (empty($className)) {
  63.             throw new InvalidArgumentException('Object class name is empty');
  64.         }
  65.         if (!class_exists($className)) {
  66.             throw new InvalidArgumentException(sprintf('User class %s does not exist'$className));
  67.         }
  68.         $reflector = new \ReflectionClass($className);
  69.         if (!$reflector->isSubclassOf(AbstractObject::class)) {
  70.             throw new InvalidArgumentException(sprintf('User class %s must be a subclass of %s'$classNameAbstractObject::class));
  71.         }
  72.         $this->className $className;
  73.     }
  74.     /**
  75.      * {@inheritdoc}
  76.      */
  77.     public function loadUserByIdentifier(string $username)
  78.     {
  79.         $getter sprintf('getBy%s'ucfirst($this->usernameField));
  80.         // User::getByUsername($username, 1);
  81.         $user call_user_func_array([$this->className$getter], [$username1]);
  82.         if ($user && $user instanceof $this->className) {
  83.             return $user;
  84.         }
  85.         throw new UserNotFoundException(sprintf('User %s was not found'$username));
  86.     }
  87.     /**
  88.      * {@inheritdoc}
  89.      *
  90.      * @deprecated use loadUserByIdentifier() instead.
  91.      */
  92.     public function loadUserByUsername($username)
  93.     {
  94.         return $this->loadUserByIdentifier($username);
  95.     }
  96.     /**
  97.      * {@inheritdoc}
  98.      */
  99.     public function refreshUser(UserInterface $user)
  100.     {
  101.         if (!$user instanceof $this->className || !$user instanceof AbstractObject) {
  102.             throw new UnsupportedUserException();
  103.         }
  104.         $refreshedUser call_user_func_array([$this->className'getById'], [$user->getId()]);
  105.         return $refreshedUser;
  106.     }
  107.     /**
  108.      * {@inheritdoc}
  109.      */
  110.     public function supportsClass($class)
  111.     {
  112.         return $class === $this->className;
  113.     }
  114. }