diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index 51a234a288388..59b7a24385993 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -68,6 +68,11 @@ public function load(array $configs, ContainerBuilder $container) if ($container->hasParameter('kernel.debug') && $container->getParameter('kernel.debug')) { $loader->load('security_debug.xml'); + + if ($container->hasDefinition('security.access.decision_manager') && $container->hasDefinition('debug.security.access.decision_manager')) { + $container->getDefinition('security.access.decision_manager')->setAutowiringTypes(array()); + $container->getDefinition('debug.security.access.decision_manager')->setAutowiringTypes(array('Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface')); + } } if (!class_exists('Symfony\Component\ExpressionLanguage\ExpressionLanguage')) { diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml index c34453cb3854f..0b869f6a74af0 100644 --- a/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml +++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml @@ -66,6 +66,8 @@ + + Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AutowiringTypesTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AutowiringTypesTest.php new file mode 100644 index 0000000000000..99fd16fa705f3 --- /dev/null +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/AutowiringTypesTest.php @@ -0,0 +1,41 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\SecurityBundle\Tests\Functional; + +use Symfony\Component\Security\Core\Authorization\AccessDecisionManager; +use Symfony\Component\Security\Core\Authorization\DebugAccessDecisionManager; + +class AutowiringTypesTest extends WebTestCase +{ + public function testAccessDecisionManagerAutowiring() + { + static::bootKernel(array('debug' => false)); + $container = static::$kernel->getContainer(); + + $accessDecisionManager = $container->get('test.autowiring_types.autowired_services')->getAccessDecisionManager(); + $this->assertInstanceOf(AccessDecisionManager::class, $accessDecisionManager); + } + + public function testDebugAccessDecisionManagerAutowiring() + { + static::bootKernel(array('debug' => true)); + $container = static::$kernel->getContainer(); + + $accessDecisionManager = $container->get('test.autowiring_types.autowired_services')->getAccessDecisionManager(); + $this->assertInstanceOf(DebugAccessDecisionManager::class, $accessDecisionManager); + } + + protected static function createKernel(array $options = array()) + { + return parent::createKernel(array('test_case' => 'AutowiringTypes') + $options); + } +} diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/AutowiringTypes/AutowiredServices.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/AutowiringTypes/AutowiredServices.php new file mode 100644 index 0000000000000..eabae2332ab96 --- /dev/null +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/AutowiringTypes/AutowiredServices.php @@ -0,0 +1,29 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\TestBundle\AutowiringTypes; + +use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface; + +class AutowiredServices +{ + private $accessDecisionManager; + + public function __construct(AccessDecisionManagerInterface $accessDecisionManager) + { + $this->accessDecisionManager = $accessDecisionManager; + } + + public function getAccessDecisionManager() + { + return $this->accessDecisionManager; + } +} diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/TestBundle.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/TestBundle.php new file mode 100644 index 0000000000000..d2af1a40ff215 --- /dev/null +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/TestBundle.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\TestBundle; + +use Symfony\Component\HttpKernel\Bundle\Bundle; + +class TestBundle extends Bundle +{ +} diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/bundles.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/bundles.php new file mode 100644 index 0000000000000..b254425b54352 --- /dev/null +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/bundles.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +return array( + new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), + new Symfony\Bundle\SecurityBundle\SecurityBundle(), + new Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\TestBundle\TestBundle(), +); diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/config.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/config.yml new file mode 100644 index 0000000000000..3f54991ef2bab --- /dev/null +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/config.yml @@ -0,0 +1,18 @@ +imports: + - { resource: ../config/framework.yml } + + +security: + providers: + in_memory: + memory: ~ + + firewalls: + test: + pattern: ^/ + security: false + +services: + test.autowiring_types.autowired_services: + class: Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\TestBundle\AutowiringTypes\AutowiredServices + autowire: true