/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Bundle/SecurityBundle/Security/FirewallMap.php
72 строки
2 KB
Christian Flothmann
Merge branch '7.1' into 7.2
16 авг 2024, 15:15
16 авг 2024, 15:15
2aacb6c
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bundle\SecurityBundle\Security; use Psr\Container\ContainerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Http\FirewallMapInterface; /** * This is a lazy-loading firewall map implementation. * * Listeners will only be initialized if we really need them. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ class FirewallMap implements FirewallMapInterface { public function __construct( private ContainerInterface $container, private iterable $map, ) { } public function getListeners(Request $request): array { $context = $this->getFirewallContext($request); if (null === $context) { return [[], null, null]; } return [$context->getListeners(), $context->getExceptionListener(), $context->getLogoutListener()]; } public function getFirewallConfig(Request $request): ?FirewallConfig { return $this->getFirewallContext($request)?->getConfig(); } private function getFirewallContext(Request $request): ?FirewallContext { if ($request->attributes->has('_firewall_context')) { $storedContextId = $request->attributes->get('_firewall_context'); foreach ($this->map as $contextId => $requestMatcher) { if ($contextId === $storedContextId) { return $this->container->get($contextId); } } $request->attributes->remove('_firewall_context'); } foreach ($this->map as $contextId => $requestMatcher) { if (null === $requestMatcher || $requestMatcher->matches($request)) { $request->attributes->set('_firewall_context', $contextId); return $this->container->get($contextId); } } return null; } }