我正在使用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
路由。
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
您可以尝试在注释中添加condition: "%kernel.environment% === 'dev'"
或用于定义路线的任何内容。
答案 1 :(得分:0)
因此,我通过设置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
答案 2 :(得分:0)
在每个Symfony环境(开发,测试,生产)中都使用security.firewalls.dev:
配置!
在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
环境变量时,此方法才有效。