Правила брандмауэра Symfony2 не работают должным образом

Я задаю два правила в разделе контроля доступа в конфигурации security.yml следующим образом:

 - { path: ^/logout,      role: IS_AUTHENTICATED_REMEMBERED }
- { path: ^/admin,       role: ROLE_ADMIN }

Но в обоих случаях анонимный пользователь может перейти на обе страницы, а в случае администратора на панели инструментов я вижу, как anon. приходит к admin Что я делаю не так?

0

Решение

Эти правила выглядят хорошо, проблема, вероятно, в другой части конфигурации вашего брандмауэра. Пожалуйста, отправьте это.

Скорее всего, у вас есть другое правило, которое соответствует этим путям ранее в вашем списке правил. Например, когда у вас есть

- { 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 }
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]