Я задаю два правила в разделе контроля доступа в конфигурации security.yml следующим образом:
- { path: ^/logout, role: IS_AUTHENTICATED_REMEMBERED }
- { path: ^/admin, role: ROLE_ADMIN }
Но в обоих случаях анонимный пользователь может перейти на обе страницы, а в случае администратора на панели инструментов я вижу, как anon.
приходит к admin
Что я делаю не так?
Эти правила выглядят хорошо, проблема, вероятно, в другой части конфигурации вашего брандмауэра. Пожалуйста, отправьте это.
Скорее всего, у вас есть другое правило, которое соответствует этим путям ранее в вашем списке правил. Например, когда у вас есть
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }
в верхней части списка правил, который будет соответствовать всем путям, а другие правила не будут оценены. В этом случае убедитесь, что вы переместите это правило в конец списка.
Если это не так, просмотрите конфигурацию брандмауэра на наличие разделов, в которых вы используете security: false
и взгляните на шаблон.
Тогда есть также ударить себя по голове сценарий, в котором ваша иерархия ролей настроена так, чтобы ROLE_ADMIN наследоваться анонимными пользователями. Но это не так, верно?
Также обратите внимание, что когда вы определяете путь как ^/admin
что это также соответствует ^/administration
и все остальные пути, начинающиеся с / admin. Это может быть хорошо для вас, но когда вы хотите убедиться, что вы исключаете только /admin
и каждый подпуть как /admin/foo
Наличие этих двух правил может лучше соответствовать вашим потребностям:
- { path: ^/admin$, role: ROLE_ADMIN }
- { path: ^/admin/, role: ROLE_ADMIN }
Других решений пока нет …