Skip to content

Commit 673057b

Browse files
authored
Merge pull request #1060 from dunglas/opt_security
Make the dependency to SecurityBundle optional
2 parents a9f6a67 + 0c4c057 commit 673057b

File tree

4 files changed

+35
-9
lines changed

4 files changed

+35
-9
lines changed

src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,15 @@ public function load(array $configs, ContainerBuilder $container)
7676
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
7777
$loader->load('api.xml');
7878
$loader->load('data_provider.xml');
79+
7980
if (interface_exists(ValidatorInterface::class)) {
8081
$loader->load('validator.xml');
8182
}
8283

8384
$bundles = $container->getParameter('kernel.bundles');
85+
if (isset($bundles['SecurityBundle'])) {
86+
$loader->load('security.xml');
87+
}
8488

8589
$this->registerMetadataConfiguration($container, $loader, $bundles, $config['loader_paths']);
8690
$this->registerOAuthConfiguration($container, $config, $loader);

src/Bridge/Symfony/Bundle/Resources/config/api.xml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,6 @@
112112
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="2" />
113113
</service>
114114

115-
<!-- This listener must be executed only when the current object is available -->
116-
<service id="api_platform.listener.request.deny_access" class="ApiPlatform\Core\EventListener\DenyAccessListener">
117-
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
118-
<argument type="service" id="security.authorization_checker" on-invalid="ignore" />
119-
120-
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="1" />
121-
</service>
122-
123115
<service id="api_platform.listener.view.serialize" class="ApiPlatform\Core\EventListener\SerializeListener">
124116
<argument type="service" id="api_platform.serializer" />
125117
<argument type="service" id="api_platform.serializer.context_builder" />
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<services>
8+
<!-- This listener must be executed only when the current object is available -->
9+
<service id="api_platform.listener.request.deny_access" class="ApiPlatform\Core\EventListener\DenyAccessListener">
10+
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
11+
<argument type="service" id="security.authorization_checker" on-invalid="ignore" />
12+
13+
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="1" />
14+
</service>
15+
</services>
16+
17+
</container>

tests/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use FOS\UserBundle\FOSUserBundle;
2020
use Nelmio\ApiDocBundle\NelmioApiDocBundle;
2121
use Prophecy\Argument;
22+
use Symfony\Bundle\SecurityBundle\SecurityBundle;
2223
use Symfony\Component\Config\Resource\ResourceInterface;
2324
use Symfony\Component\DependencyInjection\ContainerBuilder;
2425
use Symfony\Component\DependencyInjection\Definition;
@@ -167,6 +168,19 @@ public function testEnableNelmioApiDoc()
167168
$this->extension->load(array_merge_recursive(self::DEFAULT_CONFIG, ['api_platform' => ['enable_nelmio_api_doc' => true]]), $containerBuilder);
168169
}
169170

171+
public function testEnablSecurity()
172+
{
173+
$containerBuilderProphecy = $this->getContainerBuilderProphecy();
174+
$containerBuilderProphecy->getParameter('kernel.bundles')->willReturn([
175+
'DoctrineBundle' => DoctrineBundle::class,
176+
'SecurityBundle' => SecurityBundle::class,
177+
])->shouldBeCalled();
178+
$containerBuilderProphecy->setDefinition('api_platform.listener.request.deny_access', Argument::type(Definition::class))->shouldBeCalled();
179+
$containerBuilder = $containerBuilderProphecy->reveal();
180+
181+
$this->extension->load(self::DEFAULT_CONFIG, $containerBuilder);
182+
}
183+
170184
public function testDisableEagerLoadingExtension()
171185
{
172186
$containerBuilderProphecy = $this->getContainerBuilderProphecy();
@@ -300,7 +314,6 @@ private function getContainerBuilderProphecy()
300314
'api_platform.listener.view.respond',
301315
'api_platform.listener.view.serialize',
302316
'api_platform.listener.view.validate',
303-
'api_platform.listener.request.deny_access',
304317
'api_platform.metadata.extractor.yaml',
305318
'api_platform.metadata.extractor.xml',
306319
'api_platform.metadata.property.metadata_factory.annotation',

0 commit comments

Comments
 (0)