Skip to content

Commit 474eb6b

Browse files
[Security] Allow in memory user to have extra fields
1 parent a8dcc92 commit 474eb6b

File tree

5 files changed

+17
-5
lines changed

5 files changed

+17
-5
lines changed

src/Symfony/Bundle/SecurityBundle/CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
5.3.0
5+
-----
6+
7+
* Added new `extraFields` in memory provider
8+
49
5.2.0
510
-----
611

src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ private function addProvidersSection(ArrayNodeDefinition $rootNode)
301301
'memory' => [
302302
'users' => [
303303
'foo' => ['password' => 'foo', 'roles' => 'ROLE_USER'],
304-
'bar' => ['password' => 'bar', 'roles' => '[ROLE_USER, ROLE_ADMIN]'],
304+
'bar' => ['password' => 'bar', 'roles' => '[ROLE_USER, ROLE_ADMIN]', 'extraFields' => ['age' => '77']],
305305
],
306306
],
307307
],

src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/UserProvider/InMemoryFactory.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function create(ContainerBuilder $container, string $id, array $config)
3131
$users = [];
3232

3333
foreach ($config['users'] as $username => $user) {
34-
$users[$username] = ['password' => null !== $user['password'] ? (string) $user['password'] : $defaultPassword, 'roles' => $user['roles']];
34+
$users[$username] = ['password' => null !== $user['password'] ? (string) $user['password'] : $defaultPassword, 'roles' => $user['roles'], 'extraFields' => $user['extraFields']];
3535
}
3636

3737
$definition->addArgument($users);
@@ -57,6 +57,9 @@ public function addConfiguration(NodeDefinition $node)
5757
->beforeNormalization()->ifString()->then(function ($v) { return preg_split('/\s*,\s*/', $v); })->end()
5858
->prototype('scalar')->end()
5959
->end()
60+
->arrayNode('extraFields')
61+
->prototype('scalar')->end()
62+
->end()
6063
->end()
6164
->end()
6265
->end()

src/Symfony/Component/Security/Core/Tests/User/InMemoryUserProviderTest.php

+3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public function testConstructor()
2525
$user = $provider->loadUserByUsername('fabien');
2626
$this->assertEquals('foo', $user->getPassword());
2727
$this->assertEquals(['ROLE_USER'], $user->getRoles());
28+
$this->assertEquals(['age' => '77'], $user->extraFields());
2829
$this->assertFalse($user->isEnabled());
2930
}
3031

@@ -37,6 +38,7 @@ public function testRefresh()
3738
$refreshedUser = $provider->refreshUser($user);
3839
$this->assertEquals('foo', $refreshedUser->getPassword());
3940
$this->assertEquals(['ROLE_USER'], $refreshedUser->getRoles());
41+
$this->assertEquals(['age' => '77'], $refreshedUser->extraFields());
4042
$this->assertFalse($refreshedUser->isEnabled());
4143
$this->assertFalse($refreshedUser->isCredentialsNonExpired());
4244
}
@@ -48,6 +50,7 @@ protected function createProvider(): InMemoryUserProvider
4850
'password' => 'foo',
4951
'enabled' => false,
5052
'roles' => ['ROLE_USER'],
53+
'extraFields' => ['age' => '77'],
5154
],
5255
]);
5356
}

src/Symfony/Component/Security/Core/User/InMemoryUserProvider.php

+4-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ public function __construct(array $users = [])
3838
$password = $attributes['password'] ?? null;
3939
$enabled = $attributes['enabled'] ?? true;
4040
$roles = $attributes['roles'] ?? [];
41-
$user = new User($username, $password, $roles, $enabled, true, true, true);
41+
$extraFields = $attributes['extraFields'] ?? [];
42+
$user = new User($username, $password, $roles, $enabled, true, true, true, $extraFields);
4243

4344
$this->createUser($user);
4445
}
@@ -65,7 +66,7 @@ public function loadUserByUsername(string $username)
6566
{
6667
$user = $this->getUser($username);
6768

68-
return new User($user->getUsername(), $user->getPassword(), $user->getRoles(), $user->isEnabled(), $user->isAccountNonExpired(), $user->isCredentialsNonExpired(), $user->isAccountNonLocked());
69+
return new User($user->getUsername(), $user->getPassword(), $user->getRoles(), $user->isEnabled(), $user->isAccountNonExpired(), $user->isCredentialsNonExpired(), $user->isAccountNonLocked(), $user->getExtraFields());
6970
}
7071

7172
/**
@@ -79,7 +80,7 @@ public function refreshUser(UserInterface $user)
7980

8081
$storedUser = $this->getUser($user->getUsername());
8182

82-
return new User($storedUser->getUsername(), $storedUser->getPassword(), $storedUser->getRoles(), $storedUser->isEnabled(), $storedUser->isAccountNonExpired(), $storedUser->isCredentialsNonExpired() && $storedUser->getPassword() === $user->getPassword(), $storedUser->isAccountNonLocked());
83+
return new User($storedUser->getUsername(), $storedUser->getPassword(), $storedUser->getRoles(), $storedUser->isEnabled(), $storedUser->isAccountNonExpired(), $storedUser->isCredentialsNonExpired() && $storedUser->getPassword() === $user->getPassword(), $storedUser->isAccountNonLocked(), $storedUser->getExtraFields());
8384
}
8485

8586
/**

0 commit comments

Comments
 (0)