3
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_ANONYMOUSLYonly&& ! ROLE_USER && ! ROLE_ADMIN

我不希望它已经登录以允许访问此路线。如果这是可能的,security.yml那就太好了。

4

3 回答 3

9

你可以做你认为你可以做的事:

- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
于 2013-04-26T23:04:51.527 回答
4

JMSSecurityExtraBundle添加表达式支持。

文档中的示例:

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

延伸阅读:基于表达式的授权语言

于 2012-08-02T09:15:38.773 回答
3

@drgomesp 答案不正确。由于未登录的用户被认为是匿名认证的,而完全认证的用户也是匿名用户。看看这个:

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

这意味着,如果我通过匿名身份验证并且也未通过匿名身份验证,则显示“^/”网址。这将导致无限循环。

我已经在这里回答了这个问题,请查看解决方案: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

于 2014-06-20T15:42:25.753 回答