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
进行,那就太棒了。
答案 0 :(得分:9)
你可以完全按照自己的意愿行事:
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
答案 1 :(得分:4)
JMSSecurityExtraBundle
增加了表达支持。
文档示例:
access_control:
- { path: ^/foo, access: "hasRole('FOO') and hasRole('BAR')" }
答案 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