[Security] allowed class names to be passed as an argument to EncoderFactoryInterface::getEncoder()
This commit is contained in:
parent
b27d9b541a
commit
0b8b76bfef
@ -4,6 +4,7 @@ CHANGELOG
|
|||||||
2.1.0
|
2.1.0
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
* EncoderFactoryInterface::getEncoder() can now also take a class name as an argument
|
||||||
* allow switching to the user that is already impersonated
|
* allow switching to the user that is already impersonated
|
||||||
* added support for the remember_me parameter in the query
|
* added support for the remember_me parameter in the query
|
||||||
* added AccessMapInterface
|
* added AccessMapInterface
|
||||||
|
@ -30,10 +30,10 @@ class EncoderFactory implements EncoderFactoryInterface
|
|||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public function getEncoder(UserInterface $user)
|
public function getEncoder($user)
|
||||||
{
|
{
|
||||||
foreach ($this->encoders as $class => $encoder) {
|
foreach ($this->encoders as $class => $encoder) {
|
||||||
if (!$user instanceof $class) {
|
if ((is_object($user) && !$user instanceof $class) || (!is_subclass_of($user, $class) && $user != $class)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ class EncoderFactory implements EncoderFactoryInterface
|
|||||||
return $this->encoders[$class];
|
return $this->encoders[$class];
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new \RuntimeException(sprintf('No encoder has been configured for account "%s".', get_class($user)));
|
throw new \RuntimeException(sprintf('No encoder has been configured for account "%s".', is_object($class) ? get_class($user) : $class));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,9 +23,11 @@ interface EncoderFactoryInterface
|
|||||||
/**
|
/**
|
||||||
* Returns the password encoder to use for the given account.
|
* Returns the password encoder to use for the given account.
|
||||||
*
|
*
|
||||||
* @param UserInterface $user
|
* @param UserInterface|string $user A UserInterface instance of a class name
|
||||||
*
|
*
|
||||||
* @return PasswordEncoderInterface never null
|
* @return PasswordEncoderInterface
|
||||||
|
*
|
||||||
|
* @throws \RuntimeException when no password encoder could be found for the user
|
||||||
*/
|
*/
|
||||||
function getEncoder(UserInterface $user);
|
function getEncoder($user);
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\Security\Tests\Core\Encoder;
|
|||||||
|
|
||||||
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
|
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
|
||||||
use Symfony\Component\Security\Core\Encoder\EncoderFactory;
|
use Symfony\Component\Security\Core\Encoder\EncoderFactory;
|
||||||
|
use Symfony\Component\Security\Core\User\User;
|
||||||
|
|
||||||
class EncoderFactoryTest extends \PHPUnit_Framework_TestCase
|
class EncoderFactoryTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
@ -37,7 +38,25 @@ class EncoderFactoryTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$encoder = $factory->getEncoder($this->getMock('Symfony\Component\Security\Core\User\UserInterface'));
|
$encoder = $factory->getEncoder($this->getMock('Symfony\Component\Security\Core\User\UserInterface'));
|
||||||
$expectedEncoder = new MessageDigestPasswordEncoder('sha1');
|
$expectedEncoder = new MessageDigestPasswordEncoder('sha1');
|
||||||
|
$this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', ''));
|
||||||
|
|
||||||
|
$encoder = $factory->getEncoder(new User('user', 'pass'));
|
||||||
|
$expectedEncoder = new MessageDigestPasswordEncoder('sha1');
|
||||||
|
$this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', ''));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetEncoderWithClassName()
|
||||||
|
{
|
||||||
|
$factory = new EncoderFactory(array(
|
||||||
|
'Symfony\Component\Security\Core\User\UserInterface' => new MessageDigestPasswordEncoder('sha1'),
|
||||||
|
));
|
||||||
|
|
||||||
|
$encoder = $factory->getEncoder('Symfony\Component\Security\Core\User\UserInterface');
|
||||||
|
$expectedEncoder = new MessageDigestPasswordEncoder('sha1');
|
||||||
|
$this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', ''));
|
||||||
|
|
||||||
|
$encoder = $factory->getEncoder('Symfony\Component\Security\Core\User\User');
|
||||||
|
$expectedEncoder = new MessageDigestPasswordEncoder('sha1');
|
||||||
$this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', ''));
|
$this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', ''));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user