使用 access_control 管理 security.yml 中的路线

Manage route in security.yml with access_control

我要:

/p/{name} ==> in public access
/profile ==> in loggin access

我在 security.yml

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

但是,当我浏览时:

/profile => 可在 public 中访问 ==> K.O.
/p/name-here => 可在 public 访问 ==> OK

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

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

试试这个:

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