8000 [Security] Fixed roles serialization on token from user object · symfony/symfony@f5f7021 · GitHub
[go: up one dir, main page]

Skip to content
Sign in

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f5f7021

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

File tree

7 files changed

+140
-2
lines changed

7 files changed

+140
-2
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/Provider/UserAuthenticationProviderTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ public function testAuthenticateWithPreservingRoleSwitchUserRole()
220220
$this->assertInstanceOf('Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken', $authToken);
221221
$this->assertSame($user, $authToken->getUser());
222222
$this->assertContains(new Role('ROLE_FOO'), $authToken->getRoles(), '', false, false);
223-
$this->assertContains($switchUserRole, $authToken->getRoles());
223+
$this->assertContains($switchUserRole, $authToken->getRoles(), '', false, false);
224224
$this->assertEquals('foo', $authToken->getCredentials());
225225
$this->assertEquals(array('foo' => 'bar'), $authToken->getAttributes(), '->authenticate() copies token attributes');
226226
}

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
1241
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)
0