在Symfony安全性中使用regexp为一条路由允许IS_AUTHENTICATED_ANONYMOUSLY

时间:2018-01-24 14:57:58

标签: regex symfony security configuration yaml

我正在使用Symfony 3.4应用程序而我正在尝试正确配置我的security.yml来阻止所有未登记用户的网站:

/login
/register
/resseting

还有一个特殊的共享页面(我将提供更多信息)。

这是我的security.yml access_control:

access_control:
    - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: ROLE_USER }

我在我的" app"中使用_locale我的routing.yml中的路线如下:

app:
    resource: "@AppBundle/Resources/config/routing.yml"
    prefix:   /{_locale}/

fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"

以下是命令bin/console debug:router的结果(的一部分):

enter image description here ... enter image description here

我需要IS_AUTHENTICATED_ANONYMOUSLY允许的路线为customer_view(路径:/ {_ locale} / q / {token})

我已尝试过许多不同的路径:

- { path: ^/q/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/%locale%/q/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/q/[a-z]+, role: IS_AUTHENTICATED_ANONYMOUSLY }
- etc ......... 

我没有在网上找到好的信息,也没有在symfony doc上找到... 有什么帮助吗?

-EDIT -

另外,我担心我可能会使用^/q/打开evryone的路线,因为" q"可以解释为语言环境?如何在不影响应用程序安全性的情况下完成这项工作?

1 个答案:

答案 0 :(得分:0)

我不会使用正则表达式来完成整个路径,而是尝试以下内容。

- { path: ^/(%locales_string%)/customer_view, roles: [IS_AUTHENTICATED_ANONYMOUSLY] }