如何根据Symfony 4中的“ dev / prod”环境允许/拒绝路由?

问题描述 投票:1回答:3

我正在使用Symfony 4.1。我试图根据“开发” /“生产”环境允许/拒绝路由。

我试图为每个环境定义不同的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路由。

有关如何执行此操作的任何想法?

php symfony access-control
3个回答
1
投票

您可以尝试在注解中添加condition: "%kernel.environment% === 'dev'"或用于定义路线的任何内容。


0
投票

security.firewalls.dev:配置在每个Symfony环境(开发,测试,生产)中都使用!

在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环境变量的情况下,此方法也有效。


-1
投票

因此,我通过设置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
© www.soinside.com 2019 - 2024. All rights reserved.