From 86ea06831231a80f5f9266f909efca3b6dc0f071 Mon Sep 17 00:00:00 2001 From: unexge Date: Sat, 20 Aug 2016 14:30:14 +0300 Subject: [PATCH] [SecurityBundle] Support autowiring for AccessDecisionManagerInterface --- .../DependencyInjection/SecurityExtension.php | 5 +++ .../Resources/config/security.xml | 2 + .../Tests/Functional/AutowiringTypesTest.php | 41 +++++++++++++++++++ .../AutowiringTypes/AutowiredServices.php | 29 +++++++++++++ .../Bundle/TestBundle/TestBundle.php | 18 ++++++++ .../app/AutowiringTypes/bundles.php | 16 ++++++++ .../Functional/app/AutowiringTypes/config.yml | 18 ++++++++ 7 files changed, 129 insertions(+) create mode 100644 src/Symfony/Bundle/SecurityBundle/Tests/Functional/AutowiringTypesTest.php create mode 100644 src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/AutowiringTypes/AutowiredServices.php create mode 100644 src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/TestBundle/TestBundle.php create mode 100644 src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/bundles.php create mode 100644 src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/config.yml 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