我设置了我的安全设置,以保护根路径/
下的所有内容,以便公共页面查看隐私政策/privacy
。一切正常。
# security.yml
access_control:
- { path: ^/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, role: ROLE_USER }
现在我在隐私政策页面添加了一些不同的翻译,以便路线从/privacy
更改为/{_locale}/privacy
。不幸的是,我无法将_locale
参数添加到安全路径中,如下所示:
access_control:
...
- { path: ^/{_locale}/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }
那么我该如何修改security.yml
以便我可以将_locale
添加到路径中并将其限制为预定义的语言,例如(en|fr|es|de)
?
答案 0 :(得分:6)
我成功解决了这个问题
access_control:
...
- { path: ^/(en|fr|es|de)/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }
对其他回答者的建议:我现在必须手动将此字符串(en|fr|de)
输入所有路径。当我添加一种语言时,我必须在许多情况下修改这个字符串。如果可以定义一个字符串
parameters:
languages: "(en|fr|es|de)"
并在路线
中使用此功能 - { path: ^/%languages%/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }
但我认为这不会奏效。
答案 1 :(得分:5)
如果你的所有语言环境都是2个字符的(en|fr|es|de|...
),你可以使用更通用的正则表达式:
- { path: ^/[a-z]{2}/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }
这样,每次添加新语言区域时都不必触摸security.access_control
。
对于EN_en
形式的区域设置,您可以使用类似这样的内容:
- { path: ^/[a-zA-Z]{2}_[a-zA-Z]{2}/privacy$, role: IS_AUTHENTICATED_ANONYMOUSLY }
答案 2 :(得分:2)
现在(自Symfony 4.1或更高版本开始),您可以在一个地方定义语言环境,并在应用程序中的任何地方使用它
在config/services.yaml
中添加
parameters:
myAppName.locales: en|fr|es|de
在config/routes.yaml
cms:
prefix: /{_locale}/
controller: App\Controller\DefaultController::index
requirements:
_locale: '%myAppName.locales%'
在config/packages/security.yaml
security:
## .... no changes here
access_control:
- { path: ^/(%myAppName.locales%)/cms, roles: ROLE_ADMIN }
答案 3 :(得分:1)
我有同样的问题,我通过在防火墙设置中对我的安全区域中的模式进行一些更改来解决它。然后更新访问控制。代码在
之下 firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin_area:
context: admin_area
anonymous: ~
pattern: ^/(en|ar)/admin/*
form_login:
login_path: admin_login
check_path: admin_login
default_target_path: admin_home
provider: admins
logout:
path: admin_logout
target: admin_login
下面的是access_controll
access_control:
- { path: ^/(en|ar)/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/(en|ar)/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }