96 lines
2.6 KiB
PHP
96 lines
2.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the FOSUserBundle package.
|
|
*
|
|
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace FOS\UserBundle\Security;
|
|
|
|
use FOS\UserBundle\Model\UserInterface;
|
|
use FOS\UserBundle\Model\UserManagerInterface;
|
|
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
|
|
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
|
|
use Symfony\Component\Security\Core\User\UserInterface as SecurityUserInterface;
|
|
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
|
|
|
class UserProvider implements UserProviderInterface
|
|
{
|
|
/**
|
|
* @var UserManagerInterface
|
|
*/
|
|
protected $userManager;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param UserManagerInterface $userManager
|
|
*/
|
|
public function __construct(UserManagerInterface $userManager)
|
|
{
|
|
$this->userManager = $userManager;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function loadUserByUsername($username)
|
|
{
|
|
$user = $this->findUser($username);
|
|
|
|
if (!$user) {
|
|
throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
|
|
}
|
|
|
|
return $user;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function refreshUser(SecurityUserInterface $user)
|
|
{
|
|
if (!$user instanceof UserInterface) {
|
|
throw new UnsupportedUserException(sprintf('Expected an instance of FOS\UserBundle\Model\UserInterface, but got "%s".', get_class($user)));
|
|
}
|
|
|
|
if (!$this->supportsClass(get_class($user))) {
|
|
throw new UnsupportedUserException(sprintf('Expected an instance of %s, but got "%s".', $this->userManager->getClass(), get_class($user)));
|
|
}
|
|
|
|
if (null === $reloadedUser = $this->userManager->findUserBy(array('id' => $user->getId()))) {
|
|
throw new UsernameNotFoundException(sprintf('User with ID "%s" could not be reloaded.', $user->getId()));
|
|
}
|
|
|
|
return $reloadedUser;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function supportsClass($class)
|
|
{
|
|
$userClass = $this->userManager->getClass();
|
|
|
|
return $userClass === $class || is_subclass_of($class, $userClass);
|
|
}
|
|
|
|
/**
|
|
* Finds a user by username.
|
|
*
|
|
* This method is meant to be an extension point for child classes.
|
|
*
|
|
* @param string $username
|
|
*
|
|
* @return UserInterface|null
|
|
*/
|
|
protected function findUser($username)
|
|
{
|
|
return $this->userManager->findUserByUsername($username);
|
|
}
|
|
}
|