Skip to content

Commit e8484c7

Browse files
committed
- updated AbstractToken to compare Roles - Updated isEqualTo method to match roles as default User implements EquatableInterface - added test case - bumped symfony/security-core to 4.4
1 parent 0540d8e commit e8484c7

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

Authentication/Token/AbstractToken.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ public function __serialize(): array
166166
* @return string
167167
*
168168
* @final since Symfony 4.3, use __serialize() instead
169+
*
169170
* @internal since Symfony 4.3, use __serialize() instead
170171
*/
171172
public function serialize()
@@ -316,6 +317,13 @@ private function hasUserChanged(UserInterface $user)
316317
return true;
317318
}
318319

320+
$userRoles = array_map('strval', (array) $user->getRoles());
321+
$rolesChanged = \count($userRoles) !== \count($this->getRoleNames()) || \count($userRoles) !== \count(array_intersect($userRoles, $this->getRoleNames()));
322+
323+
if ($rolesChanged) {
324+
return true;
325+
}
326+
319327
if ($this->user->getUsername() !== $user->getUsername()) {
320328
return true;
321329
}

Tests/User/UserTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ public static function isEqualToData()
117117
{
118118
return [
119119
[true, new User('username', 'password'), new User('username', 'password')],
120-
[true, new User('username', 'password', ['ROLE']), new User('username', 'password')],
121-
[true, new User('username', 'password', ['ROLE']), new User('username', 'password', ['NO ROLE'])],
120+
[false, new User('username', 'password', ['ROLE']), new User('username', 'password')],
121+
[false, new User('username', 'password', ['ROLE']), new User('username', 'password', ['NO ROLE'])],
122122
[false, new User('diff', 'diff'), new User('username', 'password')],
123123
[false, new User('diff', 'diff', [], false), new User('username', 'password')],
124124
[false, new User('diff', 'diff', [], false, false), new User('username', 'password')],

User/User.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,13 @@ public function isEqualTo(UserInterface $user): bool
143143
return false;
144144
}
145145

146+
$currentRoles = array_map('strval', (array) $this->getRoles());
147+
$newRoles = array_map('strval', (array) $user->getRoles());
148+
$rolesChanged = \count($currentRoles) !== \count($newRoles) || \count($currentRoles) !== \count(array_intersect($currentRoles, $newRoles));
149+
if ($rolesChanged) {
150+
return false;
151+
}
152+
146153
if ($this->getUsername() !== $user->getUsername()) {
147154
return false;
148155
}

0 commit comments

Comments
 (0)