[SecurityBundle] Refactored the configuration

The configuration is now cleaner by avoiding using prototyped nodes
as additional keys. This is a BC break for existing providers.

 - MemoryProvider:

    security:
        providers:
	    my_provider:
	        memory:  # this level has been added
		    users:
		    	# ...

 - ChainProvider:

    security:
        providers:
	    my_provider:
	    	chain:  # This level has been added
		    providers:
		    	# ...
This commit is contained in:
Christophe Coevoet 2011-11-11 22:42:14 +01:00
parent 633f0e9d77
commit b107a3fdf0
8 changed files with 67 additions and 58 deletions

View File

@ -40,11 +40,6 @@ class EntityFactory implements UserProviderFactoryInterface
return 'entity';
}
public function getFixableKey()
{
return null;
}
public function addConfiguration(NodeDefinition $node)
{
$node

View File

@ -301,29 +301,26 @@ class MainConfiguration implements ConfigurationInterface
->prototype('array')
;
/** @var $providerNodeBuilder \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition */
$providerNodeBuilder
->children()
->scalarNode('id')->end()
->end()
->fixXmlConfig('provider')
->children()
->arrayNode('providers')
->beforeNormalization()
->ifString()
->then(function($v) { return preg_split('/\s*,\s*/', $v); })
->arrayNode('chain')
->fixXmlConfig('provider')
->children()
->arrayNode('providers')
->beforeNormalization()
->ifString()
->then(function($v) { return preg_split('/\s*,\s*/', $v); })
->end()
->prototype('scalar')->end()
->end()
->end()
->prototype('scalar')->end()
->end()
->end()
;
/** @var $factory \Symfony\Bundle\SecurityBundle\DependencyInjection\Security\UserProvider\UserProviderFactoryInterface */
foreach ($this->userProviderFactories as $factory) {
$name = str_replace('-', '_', $factory->getKey());
if (null !== $factory->getFixableKey()) {
$providerNodeBuilder->fixXmlConfig($factory->getFixableKey(), $name);
}
$factoryNode = $providerNodeBuilder->children()->arrayNode($name)->canBeUnset();
$factory->addConfiguration($factoryNode);

View File

@ -29,8 +29,7 @@ class InMemoryFactory implements UserProviderFactoryInterface
{
$definition = $container->setDefinition($id, new DefinitionDecorator('security.user.provider.in_memory'));
foreach ($config as $username => $user) {
foreach ($config['users'] as $username => $user) {
$userId = $id.'_'.$username;
$container
@ -44,24 +43,24 @@ class InMemoryFactory implements UserProviderFactoryInterface
public function getKey()
{
return 'users';
}
public function getFixableKey()
{
return 'user';
return 'memory';
}
public function addConfiguration(NodeDefinition $node)
{
$node
->useAttributeAsKey('name')
->prototype('array')
->children()
->scalarNode('password')->defaultValue(uniqid())->end()
->arrayNode('roles')
->beforeNormalization()->ifString()->then(function($v) { return preg_split('/\s*,\s*/', $v); })->end()
->prototype('scalar')->end()
->fixXmlConfig('user')
->children()
->arrayNode('users')
->useAttributeAsKey('name')
->prototype('array')
->children()
->scalarNode('password')->defaultValue(uniqid())->end()
->arrayNode('roles')
->beforeNormalization()->ifString()->then(function($v) { return preg_split('/\s*,\s*/', $v); })->end()
->prototype('scalar')->end()
->end()
->end()
->end()
->end()
->end()

View File

@ -26,7 +26,5 @@ interface UserProviderFactoryInterface
function getKey();
function getFixableKey();
function addConfiguration(NodeDefinition $builder);
}

View File

@ -472,9 +472,9 @@ class SecurityExtension extends Extension
}
// Chain provider
if ($provider['providers']) {
if (isset($provider['chain'])) {
$providers = array();
foreach ($provider['providers'] as $providerName) {
foreach ($provider['chain']['providers'] as $providerName) {
$providers[] = new Reference($this->getUserProviderId(strtolower($providerName)));
}

View File

@ -18,26 +18,34 @@ $container->loadFromExtension('security', array(
),
'providers' => array(
'default' => array(
'users' => array(
'foo' => array('password' => 'foo', 'roles' => 'ROLE_USER'),
'memory' => array(
'users' => array(
'foo' => array('password' => 'foo', 'roles' => 'ROLE_USER'),
),
),
),
'digest' => array(
'users' => array(
'foo' => array('password' => 'foo', 'roles' => 'ROLE_USER, ROLE_ADMIN'),
'memory' => array(
'users' => array(
'foo' => array('password' => 'foo', 'roles' => 'ROLE_USER, ROLE_ADMIN'),
),
),
),
'basic' => array(
'users' => array(
'foo' => array('password' => '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33', 'roles' => 'ROLE_SUPER_ADMIN'),
'bar' => array('password' => '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33', 'roles' => array('ROLE_USER', 'ROLE_ADMIN')),
'memory' => array(
'users' => array(
'foo' => array('password' => '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33', 'roles' => 'ROLE_SUPER_ADMIN'),
'bar' => array('password' => '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33', 'roles' => array('ROLE_USER', 'ROLE_ADMIN')),
),
),
),
'service' => array(
'id' => 'user.manager',
),
'chain' => array(
'providers' => array('service', 'basic'),
'chain' => array(
'providers' => array('service', 'basic'),
),
),
),

View File

@ -17,21 +17,29 @@
<encoder class="JMS\FooBundle\Entity\User4" id="security.encoder.foo" />
<provider name="default">
<user name="foo" password="foo" roles="ROLE_USER" />
<memory>
<user name="foo" password="foo" roles="ROLE_USER" />
</memory>
</provider>
<provider name="digest">
<user name="foo" password="foo" roles="ROLE_USER, ROLE_ADMIN" />
<memory>
<user name="foo" password="foo" roles="ROLE_USER, ROLE_ADMIN" />
</memory>
</provider>
<provider name="basic">
<user name="foo" password="0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33" roles="ROLE_SUPER_ADMIN" />
<user name="bar" password="0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33" roles="ROLE_USER, ROLE_ADMIN" />
<memory>
<user name="foo" password="0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33" roles="ROLE_SUPER_ADMIN" />
<user name="bar" password="0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33" roles="ROLE_USER, ROLE_ADMIN" />
</memory>
</provider>
<provider name="service" id="user.manager" />
<provider name="chain" providers="service, basic" />
<provider name="chain">
<chain providers="service, basic" />
</provider>
<firewall name="simple" pattern="/login" security="false" />

View File

@ -13,19 +13,23 @@ security:
providers:
default:
users:
foo: { password: foo, roles: ROLE_USER }
memory:
users:
foo: { password: foo, roles: ROLE_USER }
digest:
users:
foo: { password: foo, roles: 'ROLE_USER, ROLE_ADMIN' }
memory:
users:
foo: { password: foo, roles: 'ROLE_USER, ROLE_ADMIN' }
basic:
users:
foo: { password: 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33, roles: ROLE_SUPER_ADMIN }
bar: { password: 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33, roles: [ROLE_USER, ROLE_ADMIN] }
memory:
users:
foo: { password: 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33, roles: ROLE_SUPER_ADMIN }
bar: { password: 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33, roles: [ROLE_USER, ROLE_ADMIN] }
service:
id: user.manager
chain:
providers: [service, basic]
chain:
providers: [service, basic]
firewalls: