如何限制登录到Symfony2中已登录的用户

时间:2012-08-02 08:46:05

标签: php symfony access-control

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/logout, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/recover-password, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/activate-account, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_USER }

似乎access_control适用于限制不同角色的访问权限,但我需要IS_AUTHENTICATED_ANONYMOUSLY only && ! ROLE_USER && ! ROLE_ADMIN之类的内容。

我不希望已经登录以允许访问此路由。如果可以从security.yml进行,那就太棒了。

3 个答案:

答案 0 :(得分:9)

你可以完全按照自己的意愿行事:

- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }

答案 1 :(得分:4)

JMSSecurityExtraBundle增加了表达支持。

文档示例:

access_control:
    - { path: ^/foo, access: "hasRole('FOO') and hasRole('BAR')" }

进一步阅读:Expression-based Authorization Language

答案 2 :(得分:2)

@drgomesp答案不正确。由于非登录用户被认为是匿名身份验证的,因此完全身份验证的用户也是匿名用户。 看这个:

- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }

这意味着,如果我匿名进行身份验证,并且未经过身份验证,则匿名显示“^ /”url。它将导致无限循环。

我已在此处回答此问题,请检查解决方案:https://creativcoders.wordpress.com/2014/06/20/symonfy2-restrict-login-access-to-already-logged-users/

- { path: /login$, access: "!isAuthenticated()" }

基于官方文档http://jmsyst.com/bundles/JMSSecurityExtraBundle/master/expressions#usage-in-access-control