2016-10-11 7 views
4

Допустим, у меня есть свой access_control блок под security.yml:Symfony2 - установить access_control безопасности, чтобы разрешить только аутентификацию анонимно

access_control: 
    - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/reset-password, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

В этом случае каждый имеет допускаемые ввести homepage и reset-password страниц. Но я хотел бы разрешить эти страницы только для пользователей, анонимно анонимных. Полностью аутентифицированные пользователи должны получить 403 access denied error или 404 page not found.

Согласно documentation с allow_if Я должен быть ablo для создания ролевых выражений для определения доступа. Но если я делаю это так:

access_control: 
    - { path: ^/reset-password, allow_if: "has_role('IS_AUTHENTICATED_ANONYMOUSLY') and not has_role('IS_AUTHENTICATED_FULLY')" } 

Теперь следуя идее полностью идентифицированные пользователи (в системе) не должно быть позволено получить доступ к странице и анонимно подлинности должен быть в состоянии получить доступ, но, к сожалению, ни один из пользователи могут получить к нему доступ ...

Любые идеи, что мне не хватает?

UPDATE

Это заставило его работать, как предложено ниже по правильному ответу:

- { path: ^/reset-password, allow_if: "is_anonymous() and !is_authenticated()" } 

ответ

5

Вы уверены, что вы можете проверить IS_* с помощью has_role()? Они действуют как роли, но они не роли. Может быть, поэтому она всегда возвращает false:

Похоже, вы должны лучше использовать is_anonymous() и is_authenticated() пользовательские функции в выражении allow_if.

+0

Совершенная он сделал это работает просто отлично! '- {путь: ^/reset-password, allow_if:" is_anonymous() и! is_authenticated() "}' –