Skip to content

Commit f1237ea

Browse files
committed
conditionally register user checker FQCN alias
1 parent 1e9f63f commit f1237ea

File tree

5 files changed

+101
-0
lines changed

5 files changed

+101
-0
lines changed

DependencyInjection/SecurityExtension.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,10 +245,16 @@ private function createFirewalls($config, ContainerBuilder $container)
245245
$arguments[1] = $userProviders;
246246
$definition->setArguments($arguments);
247247

248+
$customUserChecker = false;
249+
248250
// load firewall map
249251
$mapDef = $container->getDefinition('security.firewall.map');
250252
$map = $authenticationProviders = $contextRefs = array();
251253
foreach ($firewalls as $name => $firewall) {
254+
if (isset($firewall['user_checker']) && 'security.user_checker' !== $firewall['user_checker']) {
255+
$customUserChecker = true;
256+
}
257+
252258
$configId = 'security.firewall.map.config.'.$name;
253259

254260
list($matcher, $listeners, $exceptionListener) = $this->createFirewall($container, $name, $firewall, $authenticationProviders, $providerIds, $configId);
@@ -275,6 +281,11 @@ private function createFirewalls($config, ContainerBuilder $container)
275281
->getDefinition('security.authentication.manager')
276282
->replaceArgument(0, new IteratorArgument($authenticationProviders))
277283
;
284+
285+
// register an autowire alias for the UserCheckerInterface if no custom user checker service is configured
286+
if (!$customUserChecker) {
287+
$container->setAlias('Symfony\Component\Security\Core\User\UserCheckerInterface', new Alias('security.user_checker', false));
288+
}
278289
}
279290

280291
private function createFirewall(ContainerBuilder $container, $id, $firewall, &$authenticationProviders, $providerIds, $configId)

Tests/DependencyInjection/CompleteConfigurationTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,8 @@ public function testFirewalls()
172172
'security.access_listener',
173173
),
174174
), $listeners);
175+
176+
$this->assertFalse($container->hasAlias('Symfony\Component\Security\Core\User\UserCheckerInterface', 'No user checker alias is registered when custom user checker services are registered'));
175177
}
176178

177179
public function testFirewallRequestMatchers()
@@ -200,6 +202,14 @@ public function testFirewallRequestMatchers()
200202
), $matchers);
201203
}
202204

205+
public function testUserCheckerAliasIsRegistered()
206+
{
207+
$container = $this->getContainer('no_custom_user_checker');
208+
209+
$this->assertTrue($container->hasAlias('Symfony\Component\Security\Core\User\UserCheckerInterface', 'Alias for user checker is registered when no custom user checker service is registered'));
210+
$this->assertFalse($container->getAlias('Symfony\Component\Security\Core\User\UserCheckerInterface')->isPublic());
211+
}
212+
203213
public function testAccess()
204214
{
205215
$container = $this->getContainer('container1');
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
$container->loadFromExtension('security', array(
4+
'providers' => array(
5+
'default' => array(
6+
'memory' => array(
7+
'users' => array(
8+
'foo' => array('password' => 'foo', 'roles' => 'ROLE_USER'),
9+
),
10+
),
11+
),
12+
),
13+
'firewalls' => array(
14+
'simple' => array('pattern' => '/login', 'security' => false),
15+
'secure' => array('stateless' => true,
16+
'http_basic' => true,
17+
'http_digest' => array('secret' => 'TheSecret'),
18+
'form_login' => true,
19+
'anonymous' => true,
20+
'switch_user' => true,
21+
'x509' => true,
22+
'remote_user' => true,
23+
'logout' => true,
24+
'remember_me' => array('secret' => 'TheSecret'),
25+
'user_checker' => null,
26+
),
27+
),
28+
));
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<srv:container xmlns="http://symfony.com/schema/dic/security"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:srv="http://symfony.com/schema/dic/services"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<config>
8+
<provider name="default">
9+
<memory>
10+
<user name="foo" password="foo" roles="ROLE_USER" />
11+
</memory>
12+
</provider>
13+
14+
<firewall name="simple" pattern="/login" security="false" />
15+
16+
<firewall name="secure" stateless="true">
17+
<http-basic />
18+
<http-digest secret="TheSecret" />
19+
<form-login />
20+
<anonymous />
21+
<switch-user />
22+
<x509 />
23+
<remote-user />
24+
<user-checker />
25+
<logout />
26+
<remember-me secret="TheSecret"/>
27+
</firewall>
28+
</config>
29+
</srv:container>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
security:
2+
providers:
3+
default:
4+
memory:
5+
users:
6+
foo: { password: foo, roles: ROLE_USER }
7+
8+
firewalls:
9+
simple: { pattern: /login, security: false }
10+
secure:
11+
stateless: true
12+
http_basic: true
13+
http_digest:
14+
secret: TheSecret
15+
form_login: true
16+
anonymous: true
17+
switch_user: true
18+
x509: true
19+
remote_user: true
20+
logout: true
21+
remember_me:
22+
secret: TheSecret
23+
user_checker: ~

0 commit comments

Comments
 (0)