Skip to content

Commit fa1ec72

Browse files
94nonichalasr
authored andcommitted
[Security] Allow configuring a target url when switching user
1 parent 5e909eb commit fa1ec72

File tree

3 files changed

+6
-0
lines changed

3 files changed

+6
-0
lines changed

DependencyInjection/MainConfiguration.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ private function addFirewallsSection(ArrayNodeDefinition $rootNode, array $facto
244244
->scalarNode('provider')->end()
245245
->scalarNode('parameter')->defaultValue('_switch_user')->end()
246246
->scalarNode('role')->defaultValue('ROLE_ALLOWED_TO_SWITCH')->end()
247+
->scalarNode('target_url')->defaultValue(null)->end()
247248
->end()
248249
->end()
249250
->arrayNode('required_badges')

DependencyInjection/SecurityExtension.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,9 @@ private function createSwitchUserListener(ContainerBuilder $container, string $i
843843
if (!$userProvider) {
844844
throw new InvalidConfigurationException(sprintf('Not configuring explicitly the provider for the "switch_user" listener on "%s" firewall is ambiguous as there is more than one registered provider.', $id));
845845
}
846+
if ($stateless && null !== $config['target_url']) {
847+
throw new InvalidConfigurationException(sprintf('Cannot set a "target_url" for the "switch_user" listener on the "%s" firewall as it is stateless.', $id));
848+
}
846849

847850
$switchUserListenerId = 'security.authentication.switchuser_listener.'.$id;
848851
$listener = $container->setDefinition($switchUserListenerId, new ChildDefinition('security.authentication.switchuser_listener'));
@@ -852,6 +855,7 @@ private function createSwitchUserListener(ContainerBuilder $container, string $i
852855
$listener->replaceArgument(6, $config['parameter']);
853856
$listener->replaceArgument(7, $config['role']);
854857
$listener->replaceArgument(9, $stateless);
858+
$listener->replaceArgument(10, $config['target_url']);
855859

856860
return $switchUserListenerId;
857861
}

Resources/config/security_listeners.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
'ROLE_ALLOWED_TO_SWITCH',
152152
service('event_dispatcher')->nullOnInvalid(),
153153
false, // Stateless
154+
abstract_arg('Target Url'),
154155
])
155156
->tag('monolog.logger', ['channel' => 'security'])
156157

0 commit comments

Comments
 (0)