Допустим, у меня есть свой блок access_control
в security.yml
:
access_control: - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/reset-password, roles: IS_AUTHENTICATED_ANONYMOUSLY }
В этом случае каждый может войти на homepage
и homepage
reset-password
. Но я хотел бы разрешить эти страницы только для пользователей, анонимно анонимных. Полностью аутентифицированные пользователи должны получить 403 access denied error
или 404 page not found
.
Согласно документации с allow_if
я должен быть ablo для создания ролевых выражений для определения доступа. Но если я сделаю это так:
access_control: - { path: ^/reset-password, allow_if: "has_role('IS_AUTHENTICATED_ANONYMOUSLY') and not has_role('IS_AUTHENTICATED_FULLY')" }
Теперь, следуя идее, чтобы полностью аутентифицированные пользователи (вход в систему) не должны были иметь доступ к странице, и анонимно аутентифицированные должны иметь доступ, но, к сожалению, ни один из пользователей не может получить к ней доступ …
Любые идеи, что мне не хватает?
ОБНОВИТЬ
Это заставило его работать, как предложено ниже, правильным ответом:
- { path: ^/reset-password, allow_if: "is_anonymous() and !is_authenticated()" }
Вы уверены, что можете проверить IS_*
используя has_role()
? Они действуют как роли, но они не роли. Возможно, поэтому он всегда возвращает false
:
Похоже, вам лучше использовать is_anonymous()
и is_authenticated()
пользовательские функции в выражении allow_if
.