首页 > 解决方案 > 使用 access_control 管理 security.yml 中的路由

问题描述

我想 :

/p/{name} ==> 在公共访问中
/profile ==> 在登录访问中

我在security.yml中做了这个

access_control:
    - { path: ^/[p]/* , role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/*, role: ROLE_CONNECT }

但是,当我浏览时:

/profile => 可公开访问 ==> KO
/p/name-here => 可公开访问 ==> OK

标签: phpsymfonyaccess-control

解决方案


我很确定它将^/[p]/*匹配以 开头的任何路径/p,并且您将其作为第一条规则,因此它首先匹配并允许访问。

方括号[]定义了一组要匹配的字符,你只想匹配一个,所以你不需要它们。表示最后*匹配零个或多个/字符,你知道后面会有一个/p所以省略星号。路径是前缀,因此您无需担心路径的可变部分。

试试这个:

- { path: ^/p/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, role: ROLE_CONNECT }

推荐阅读