通过角色进行 Symfony 访问控制

Symfony access control by roles

我有 FOSUserBundle,我想做一个简单的访问列表路径,如果用户未登录,它将发送到登录页面,如果不是 ROLE_ADMIN o 其他他不能转到 /admin 页。

我把这个写在我的 security.yml:

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: IS_AUTHENTICATED_FULLY }
    - { path: ^/admin, role: ROLE_ADMIN }

但现在所有登录的用户都可以转到 /admin page...

我没理解错

规则按照编写的顺序进行解析,

- { path: ^/, role: IS_AUTHENTICATED_FULLY }
如果用户通过身份验证,

将授予对 / 下所有区域的访问权限

您需要切换最后两个规则,一切都会如您所愿。

尝试改变

    - { path: ^/, role: IS_AUTHENTICATED_FULLY }
    - { path: ^/admin, role: ROLE_ADMIN }

    - { path: ^/admin, role: ROLE_ADMIN }
    - { path: ^/, role: IS_AUTHENTICATED_FULLY }

只需删除

- { path: ^/, role: IS_AUTHENTICATED_FULLY }