Отключить страницы витрины, кроме API - PullRequest
1 голос
/ 18 июня 2020

Мне нужно отключить все страницы витрины в ORO commerce, кроме API и c файлов (js, media и т.д. c).

Я пытался использовать событие kernel.controller слушатель и выбирает запросы внешнего интерфейса, проверяя контекст брандмауэра:

$request->get('_firewall_context') === 'security.firewall.map.context.frontend'

И удалось отфильтровать контроллеры API, проверяя экземпляр контроллера на наличие AbstractFOSRestController и ApiDoc связанных. Но не удалось найти способ разделить страницы витрины и запросы c файлов

1 Ответ

1 голос
/ 19 июня 2020
  1. JS и Media должны обслуживаться непосредственно веб-сервером (обычно Nginx). В этом случае к приложению никакого отношения не имеет. Но уже существует брандмауэр с именем assets, у которого есть опция security: false, поэтому проверки безопасности там отключены, даже если эти файлы обслуживаются приложением.

  2. Также есть личные вложения . Вы можете создать еще один брандмауэр, который будет загружен до frontend, чтобы при необходимости обслуживать вложения частной витрины отдельно.

  3. Единственный брандмауэр, который вам нужно прервать, - это frontend. Вы можете полностью отключить доступ к нему с помощью конфигурации брандмауэра и добавить обработчик отказа в доступе , чтобы вернуть 404 вместо 403.

Чтобы получить полный список межсетевых экранов вы можете запустить:

php bin/console debug:config security firewalls

В общем, гораздо проще полагаться на имена межсетевых экранов, а не на контекст межсетевого экрана.

...