diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddAuthenticationProvidersPass.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddAuthenticationProvidersPass.php deleted file mode 100644 index 3b5745333d05..000000000000 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddAuthenticationProvidersPass.php +++ /dev/null @@ -1,27 +0,0 @@ -hasDefinition('security.authentication.manager')) { - return; - } - - $providers = array(); - foreach ($container->findTaggedServiceIds('security.authentication_provider') as $id => $attributes) { - $providers[] = new Reference($id); - } - - $container - ->getDefinition('security.authentication.manager') - ->setArguments(array($providers)) - ; - } -} \ No newline at end of file diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php index 624f2d4b15be..c10bd89e7ab5 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Configuration.php @@ -159,7 +159,7 @@ protected function addFirewallsSection($rootNode, array $factories) ->prototype('scalar')->end() ->end() ->end() - ->booleanNode('anonymous')->end() + ->booleanNode('anonymous')->defaultFalse()->end() ->arrayNode('switch_user') ->scalarNode('provider')->end() ->scalarNode('parameter')->defaultValue('_switch_user')->end() diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php index 88b481e3b1f1..745f6f427b36 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php @@ -42,10 +42,6 @@ public function create(ContainerBuilder $container, $id, $config, $userProviderI { // authentication provider $authProviderId = $this->createAuthProvider($container, $id, $config, $userProviderId); - $container - ->getDefinition($authProviderId) - ->addTag('security.authentication_provider') - ; // authentication listener $listenerId = $this->createListener($container, $id, $config, $userProviderId); diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php index 9b2b7a870a86..f28bd9befb7c 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php @@ -31,7 +31,6 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, ->setDefinition($provider, new DefinitionDecorator('security.authentication.provider.dao')) ->setArgument(0, new Reference($userProvider)) ->setArgument(2, $id) - ->addTag('security.authentication_provider') ; // listener diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php index 49cf748cf40e..618225567dde 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php @@ -31,7 +31,6 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, ->setDefinition($provider, new DefinitionDecorator('security.authentication.provider.dao')) ->setArgument(0, new Reference($userProvider)) ->setArgument(2, $id) - ->addTag('security.authentication_provider') ; // listener diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php index c4727429ab5e..1a42372266a9 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php @@ -31,7 +31,6 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, ->setDefinition($authProviderId, new DefinitionDecorator('security.authentication.provider.rememberme')) ->addArgument($config['key']) ->addArgument($id) - ->addTag('security.authentication_provider') ; // remember me services diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php index d53f75d978ca..e59f219b28cc 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php @@ -32,7 +32,6 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, ->setDefinition($provider, new DefinitionDecorator('security.authentication.provider.pre_authenticated')) ->setArgument(0, new Reference($userProvider)) ->addArgument($id) - ->addTag('security.authentication_provider') ; // listener diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index 81e0bb1c861e..49498f3fa160 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -175,9 +175,9 @@ protected function createFirewalls($config, ContainerBuilder $container) // load firewall map $mapDef = $container->getDefinition('security.firewall.map'); - $map = array(); + $map = $authenticationProviders = array(); foreach ($firewalls as $name => $firewall) { - list($matcher, $listeners, $exceptionListener) = $this->createFirewall($container, $name, $firewall, $providerIds, $factories); + list($matcher, $listeners, $exceptionListener) = $this->createFirewall($container, $name, $firewall, $authenticationProviders, $providerIds, $factories); $contextId = 'security.firewall.map.context.'.$name; $context = $container->setDefinition($contextId, new DefinitionDecorator('security.firewall.context')); @@ -188,9 +188,18 @@ protected function createFirewalls($config, ContainerBuilder $container) $map[$contextId] = $matcher; } $mapDef->setArgument(1, $map); + + // add authentication providers to authentication manager + $authenticationProviders = array_map(function($id) { + return new Reference($id); + }, array_values(array_unique($authenticationProviders))); + $container + ->getDefinition('security.authentication.manager') + ->setArgument(0, $authenticationProviders) + ; } - protected function createFirewall(ContainerBuilder $container, $id, $firewall, $providerIds, array $factories) + protected function createFirewall(ContainerBuilder $container, $id, $firewall, &$authenticationProviders, $providerIds, array $factories) { // Matcher $i = 0; @@ -259,7 +268,7 @@ protected function createFirewall(ContainerBuilder $container, $id, $firewall, $ } // Authentication listeners - list($authListeners, $providers, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $defaultProvider, $factories); + list($authListeners, $defaultEntryPoint) = $this->createAuthenticationListeners($container, $id, $firewall, $authenticationProviders, $defaultProvider, $factories); $listeners = array_merge($listeners, $authListeners); @@ -295,10 +304,9 @@ protected function createContextListener($container, $contextKey) return $this->contextListeners[$contextKey] = $listenerId; } - protected function createAuthenticationListeners($container, $id, $firewall, $defaultProvider, array $factories) + protected function createAuthenticationListeners($container, $id, $firewall, &$authenticationProviders, $defaultProvider, array $factories) { $listeners = array(); - $providers = array(); $hasListeners = false; $defaultEntryPoint = null; @@ -312,7 +320,7 @@ protected function createAuthenticationListeners($container, $id, $firewall, $de list($provider, $listenerId, $defaultEntryPoint) = $factory->create($container, $id, $firewall[$key], $userProvider, $defaultEntryPoint); $listeners[] = new Reference($listenerId); - $providers[] = new Reference($provider); + $authenticationProviders[] = $provider; $hasListeners = true; } } @@ -321,6 +329,7 @@ protected function createAuthenticationListeners($container, $id, $firewall, $de // Anonymous if (isset($firewall['anonymous'])) { $listeners[] = new Reference('security.authentication.listener.anonymous'); + $authenticationProviders[] = 'security.authentication.provider.anonymous'; $hasListeners = true; } @@ -328,7 +337,7 @@ protected function createAuthenticationListeners($container, $id, $firewall, $de throw new \LogicException(sprintf('No authentication listener registered for pattern "%s".', isset($firewall['pattern']) ? $firewall['pattern'] : '')); } - return array($listeners, $providers, $defaultEntryPoint); + return array($listeners, $defaultEntryPoint); } protected function createEncoders($encoders, ContainerBuilder $container) diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml index f36a6c461a7e..9be00b4abb11 100644 --- a/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml +++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/security_listeners.xml @@ -54,7 +54,6 @@ %security.anonymous.key% -