Symfony 2.8访问控制

时间:2018-01-27 08:57:01

标签: symfony

我的访问控制部分中有以下内容

access_control:
  - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
  - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
  - { path: ^/admin, roles: ROLE_SUPER_ADMIN }
  - { path: ^/(.*), roles: ROLE_USER }

我认为这意味着我的基本网址和登录屏幕不会需要ROLE_USER,但所有其他路线都需要用户登录。但是这看起来并非如此所有路线似乎都是AUTHENTICATED ANONYMOUSLY

我确定有一些简单的东西我很遗憾但是非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

检查以下代码。我认为这就是你要找的东西。

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: ROLE_USER }
    - { path: ^/admin/, role: ROLE_ADMIN }

通过上面的代码,匿名用户可以访问登录和唯一的主路径。只有在用户有一些规则时,才能访问任何其他链接。但我相信你可能有一个注册链接和忘记密码链接。所有用户都应该可以访问注册和忘记密码链接。所以不要忘记将这些网址保留在第二行。

希望这会对你有所帮助。

答案 1 :(得分:0)

西洛

所有Access控件都自上而下运行。

Symfony从上到下逐个检查具有访问控制的当前路由。

如果匹配,则不要检查其余部分。

移动

.exe

作为第一个条件的顶部

答案 2 :(得分:0)

您的两行指向相同的网址格式,因此存在冲突:

    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/(.*), roles: ROLE_USER }

试试这个:

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: ROLE_SUPER_ADMIN }
    - { path: ^/, roles: ROLE_USER }