Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 69a588f

Browse files
committed
[Security] Fixed roles serialization on token from user object
1 parent bcb1d8f commit 69a588f

File tree

6 files changed

+139
-1
lines changed

6 files changed

+139
-1
lines changed

src/Symfony/Component/Security/Core/Authentication/Token/AbstractToken.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function __construct(array $roles = array())
4646
throw new \InvalidArgumentException(sprintf('$roles must be an array of strings, or RoleInterface instances, but got %s.', gettype($role)));
4747
}
4848

49-
$this->roles[] = $role;
49+
$this->roles[] = clone $role;
5050
}
5151
}
5252

src/Symfony/Component/Security/Core/Tests/Authentication/Token/AbstractTokenTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Component\Security\Core\Authentication\Token\AbstractToken;
1515
use Symfony\Component\Security\Core\Role\Role;
1616
use Symfony\Component\Security\Core\Role\SwitchUserRole;
17+
use Symfony\Component\Security\Core\User\User;
1718

1819
class TestUser
1920
{
@@ -96,6 +97,19 @@ public function testSerialize()
9697
$this->assertEquals($token->getAttributes(), $uToken->getAttributes());
9798
}
9899

100+
public function testSerializeWithRoleObjects()
101+
{
102+
$user = new User('name', 'password', array(new Role('ROLE_FOO')));
103+
$token = new ConcreteToken($user, $user->getRoles());
104+
105+
$serialized = serialize($token);
106+
$unserialized = unserialize($serialized);
107+
108+
$roles = $unserialized->getRoles();
109+
110+
$this->assertEquals($roles, $user->getRoles());
111+
}
112+
99113
public function testSerializeParent()
100114
{
101115
$user = new TestUser('fabien');

src/Symfony/Component/Security/Core/Tests/Authentication/Token/AnonymousTokenTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
1515
use Symfony\Component\Security\Core\Role\Role;
16+
use Symfony\Component\Security\Core\User\User;
1617

1718
class AnonymousTokenTest extends \PHPUnit_Framework_TestCase
1819
{
@@ -42,4 +43,34 @@ public function testGetUser()
4243
$token = new AnonymousToken('foo', 'bar');
4344
$this->assertEquals('bar', $token->getUser());
4445
}
46+
47+
public function testSerialize()
48+
{
49+
$user = new User('name', 'password', array('ROLE_FOO'));
50+
$token = new AnonymousToken('secret', $user, $user->getRoles());
51+
52+
$serialized = serialize($token);
53+
$unserialized = unserialize($serialized);
54+
55+
$roles = $unserialized->getRoles();
56+
57+
$this->assertCount(1, $roles);
58+
59+
$role = $roles[0];
60+
$this->assertInstanceOf('Symfony\Component\Security\Core\Role\RoleInterface', $role);
61+
$this->assertEquals('ROLE_FOO', $role->getRole());
62+
}
63+
64+
public function testSerializeWithRoleObjects()
65+
{
66+
$user = new User('name', 'password', array(new Role('ROLE_FOO')));
67+
$token = new AnonymousToken('secret', $user, $user->getRoles());
68+
69+
$serialized = serialize($token);
70+
$unserialized = unserialize($serialized);
71+
72+
$roles = $unserialized->getRoles();
73+
74+
$this->assertEquals($user->getRoles(), $roles);
75+
}
4576
}

src/Symfony/Component/Security/Core/Tests/Authentication/Token/PreAuthenticatedTokenTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken;
1515
use Symfony\Component\Security\Core\Role\Role;
16+
use Symfony\Component\Security\Core\User\User;
1617

1718
class PreAuthenticatedTokenTest extends \PHPUnit_Framework_TestCase
1819
{
@@ -45,4 +46,34 @@ public function testEraseCredentials()
4546
$token->eraseCredentials();
4647
$this->assertEquals('', $token->getCredentials());
4748
}
49+
50+
public function testSerialize()
51+
{
52+
$user = new User('name', 'password', array('ROLE_FOO'));
53+
$token = new PreAuthenticatedToken($user, 'password', 'providerKey', $user->getRoles());
54+
55+
$serialized = serialize($token);
56+
$unserialized = unserialize($serialized);
57+
58+
$roles = $unserialized->getRoles();
59+
60+
$this->assertCount(1, $roles);
61+
62+
$role = $roles[0];
63+
$this->assertInstanceOf('Symfony\Component\Security\Core\Role\RoleInterface', $role);
64+
$this->assertEquals('ROLE_FOO', $role->getRole());
65+
}
66+
67+
public function testSerializeWithRoleObjects()
68+
{
69+
$user = new User('name', 'password', array(new Role('ROLE_FOO')));
70+
$token = new PreAuthenticatedToken($user, 'password', 'providerKey', $user->getRoles());
71+
72+
$serialized = serialize($token);
73+
$unserialized = unserialize($serialized);
74+
75+
$roles = $unserialized->getRoles();
76+
77+
$this->assertEquals($user->getRoles(), $roles);
78+
}
4879
}

src/Symfony/Component/Security/Core/Tests/Authentication/Token/RememberMeTokenTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Component\Security\Core\Authentication\Token\RememberMeToken;
1515
use Symfony\Component\Security\Core\Role\Role;
16+
use Symfony\Component\Security\Core\User\User;
1617

1718
class RememberMeTokenTest extends \PHPUnit_Framework_TestCase
1819
{
@@ -52,6 +53,36 @@ public function testConstructorKeyCannotBeEmptyString()
5253
);
5354
}
5455

56+
public function testSerialize()
57+
{
58+
$user = new User('name', 'password', array('ROLE_FOO'));
59+
$token = new RememberMeToken($user, 'password', 'providerKey');
60+
61+
$serialized = serialize($token);
62+
$unserialized = unserialize($serialized);
63+
64+
$roles = $unserialized->getRoles();
65+
66+
$this->assertCount(1, $roles);
67+
68+
$role = $roles[0];
69+
$this->assertInstanceOf('Symfony\Component\Security\Core\Role\RoleInterface', $role);
70+
$this->assertEquals('ROLE_FOO', $role->getRole());
71+
}
72+
73+
public function testSerializeWithRoleObjects()
74+
{
75+
$user = new User('name', 'password', array(new Role('ROLE_FOO')));
76+
$token = new RememberMeToken($user, 'password', 'providerKey');
77+
78+
$serialized = serialize($token);
79+
$unserialized = unserialize($serialized);
80+
81+
$roles = $unserialized->getRoles();
82+
83+
$this->assertEquals($user->getRoles(), $roles);
84+
}
85+
5586
protected function getUser($roles = array('ROLE_FOO'))
5687
{
5788
$user = $this->getMock('Symfony\Component\Security\Core\User\UserInterface');

src/Symfony/Component/Security/Core/Tests/Authentication/Token/UsernamePasswordTokenTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
1515
use Symfony\Component\Security\Core\Role\Role;
16+
use Symfony\Component\Security\Core\User\User;
1617

1718
class UsernamePasswordTokenTest extends \PHPUnit_Framework_TestCase
1819
{
@@ -50,6 +51,36 @@ public function testEraseCredentials()
5051
$this->assertEquals('', $token->getCredentials());
5152
}
5253

54+
public function testSerialize()
55+
{
56+
$user = new User('name', 'password', array('ROLE_FOO'));
57+
$token = new UsernamePasswordToken($user, 'password', 'providerKey', $user->getRoles());
58+
59+
$serialized = serialize($token);
60+
$unserialized = unserialize($serialized);
61+
62+
$roles = $unserialized->getRoles();
63+
64+
$this->assertCount(1, $roles);
65+
66+
$role = $roles[0];
67+
$this->assertInstanceOf('Symfony\Component\Security\Core\Role\RoleInterface', $role);
68+
$this->assertEquals('ROLE_FOO', $role->getRole());
69+
}
70+
71+
public function testSerializeWithRoleObjects()
72+
{
73+
$user = new User('name', 'password', array(new Role('ROLE_FOO')));
74+
$token = new UsernamePasswordToken($user, 'password', 'providerKey', $user->getRoles());
75+
76+
$serialized = serialize($token);
77+
$unserialized = unserialize($serialized);
78+
79+
$roles = $unserialized->getRoles();
80+
81+
$this->assertEquals($user->getRoles(), $roles);
82+
}
83+
5384
public function testToString()
5485
{
5586
$token = new UsernamePasswordToken('foo', '', 'foo', array('A', 'B'));

0 commit comments

Comments
 (0)