Explorar o código

[FrameworkBundle][Security] Create DIC aliases for security providers that are explicit services

The SecurityFactories expect security services to have a consistent naming convention, which was not the case for providers defined as `{ id: another.service }`.  These providers will now be aliased as "security.authentication.provider.[key]" and can be accessed in the same manner as other providers.
Jeremy Mikola %!s(int64=14) %!d(string=hai) anos
pai
achega
3ab82cbd53

+ 3 - 1
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/SecurityExtension.php

@@ -363,7 +363,9 @@ class SecurityExtension extends Extension
 
         // Existing DAO service provider
         if (isset($provider['id'])) {
-            return array($provider['id'], $encoder);
+            $container->setAlias($name, $provider['id']);
+
+            return array($name, $encoder);
         }
 
         // Chain provider

+ 3 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/provider.php

@@ -17,5 +17,8 @@ $container->loadFromExtension('security', 'config', array(
         'doctrine' => array(
             'entity' => array('class' => 'SecurityBundle:User', 'property' => 'username')
         ),
+        'service' => array(
+            'id' => 'user.manager',
+        ),
     )
 ));

+ 2 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/provider.xml

@@ -19,5 +19,7 @@
         <provider name="doctrine">
             <entity class="SecurityBundle:User" property="username" />
         </provider>
+
+        <provider name="service" id="user.manager" />
     </config>
 </srv:container>

+ 3 - 0
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/provider.yml

@@ -12,3 +12,6 @@ security.config:
 
         doctrine:
             entity: { class: SecurityBundle:User, property: username }
+
+        service:
+            id: user.manager

+ 2 - 1
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/SecurityExtensionTest.php

@@ -33,7 +33,7 @@ abstract class SecurityExtensionTest extends TestCase
     {
         $container = $this->getContainer('provider');
 
-        $providers = array_values(array_filter(array_keys($container->getDefinitions()), function ($key) { return 0 === strpos($key, 'security.authentication.provider.'); }));
+        $providers = array_values(array_filter($container->getServiceIds(), function ($key) { return 0 === strpos($key, 'security.authentication.provider.'); }));
 
         $this->assertEquals(array(
             'security.authentication.provider.digest',
@@ -42,6 +42,7 @@ abstract class SecurityExtensionTest extends TestCase
             'security.authentication.provider.basic_b7f0cf21802ffc8b22cadbb255f07213',
             'security.authentication.provider.basic_98e44377704554700e68c22094b51ca4',
             'security.authentication.provider.doctrine',
+            'security.authentication.provider.service',
         ), $providers);
     }