Как разрешить / запретить маршруты в соответствии со средой «dev / prod» в Symfony 4? - PullRequest
0 голосов
/ 05 февраля 2019

Я использую Symfony 4.1.Я пытаюсь разрешить / запретить маршрут в соответствии со средой «dev» / «prod».

Я пытался определить отдельные security файлы конфигурации для каждой среды, но я не разрешил.При загрузке кэша Symfony отображается следующее сообщение: Configuration path "security.access_control" cannot be overwritten. You have to define all options for this path, and any of its sub-paths in one configuration section.

Здесь мой раздел безопасности:

security:
    access_control:
        - { path: '^/$' , roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: '^/ping$' , roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: '^/docs\.json$' , roles: IS_AUTHENTICATED_ANONYMOUSLY }

Я хочу разрешить (без аутентификации) маршрут docs.json в devокружение и ограничить (с аутентификацией) маршрут docs.json в среде prod.

Есть идеи, как это сделать?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Поэтому я решил проблему, настроив брандмауэр dev и обновив шаблон для обхода защиты.

security:
    access_control:
        - { path: '^/$' , roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: '^/ping$' , roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: '^/docs\.json$' , roles: IS_AUTHENTICATED_ANONYMOUSLY }
    firewalls:
        dev:
            pattern: '^/(_(profiler|wdt)|css|images|js|docs)/'
            security: false
0 голосов
/ 19 августа 2019

Конфигурация security.firewalls.dev: используется в любой среде Symfony (dev, test, prod)!

В Symfony 4 для обеспечения доступности некоторых маршрутов только в некоторых средах выможет сделать что-то вроде этого:

Настройка:

config/packages/security.yaml:

parameters:
    # Adds a fallback SECURITY_DEV_PATTERN if the env var is not set.
    env(SECURITY_DEV_PATTERN): '^/(_(profiler|wdt)|css|images|js)/'

security:
    firewalls:
        dev:
            pattern: '%env(SECURITY_DEV_PATTERN)%'
            security: false

Переопределение для среды Symfony:

создать новый файл config/packages/dev/parameters.yaml:

parameters:
    env(SECURITY_DEV_PATTERN): '^/(_(profiler|wdt)|css|images|js)/|^/docs'

Теперь /docs доступен только без брандмауэра в среде разработчика Symfony

Переопределить с помощью переменных среды:

Вы также можете переопределить SECURITY_DEV_PATTERN в файле .env:

SECURITY_DEV_PATTERN=^/(_(profiler|wdt)|css|images|js)/|^/docs

Это работает, только если вы не включите .env в вашей производственной среде, или если вы специально переопределяете переменную среды SECURITY_DEV_PATTERN там же.

0 голосов
/ 05 февраля 2019

Вы можете попытаться добавить condition: "%kernel.environment% === 'dev'" в аннотации или все, что вы используете для определения своего маршрута.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...