FOS: не имеющий доступа пользователь получает доступ к определенному URL

мой ROLE_ADMIN пользователь может получить доступ к backend/user URL, хотя я не дал ему разрешение на это. Это первый раз, когда я использую FOS, поэтому я могу сделать глупую ошибку ниже. Я читаю документацию. Что я должен сделать, чтобы избежать этой проблемы с доступом?

заранее спасибо

security.yml

role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/backend, role: ROLE_ADMIN }
- { path: ^/backend/user, role: ROLE_SUPER_ADMIN }

ПОЛЬЗОВАТЕЛИ

mbp:symfony$ php app/console fos:user:create user user@foobar user
Created user user
mbp:symfony$ php app/console fos:user:promote user ROLE_USER
User "user" did already have "ROLE_USER" role.

mbp:symfony$ php app/console fos:user:create admin admin@foobar admin
Created user admin
mbp:symfony$ php app/console fos:user:promote admin ROLE_ADMIN
Role "ROLE_ADMIN" has been added to user "admin".

mbp:symfony$ php app/console fos:user:create superadmin superadmin@foobar superadmin
Created user superadmin
mbp:symfony$ php app/console fos:user:promote superadmin ROLE_SUPER_ADMIN
Role "ROLE_SUPER_ADMIN" has been added to user "superadmin".

2

Решение

Контроль доступа использует первое соответствующее правило для обеспечения доступа, поэтому ваши правила останавливаются на - { path: ^/backend, role: ROLE_ADMIN } Это означает, что правило после никогда не достигается.

Чтобы это работало так, как вы ожидали, вы должны изменить порядок своих правил, чтобы они соответствовали.

access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/backend/user, role: ROLE_SUPER_ADMIN }
- { path: ^/backend, role: ROLE_ADMIN }
3

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

В вашем коде шаблон регулярного выражения соответствует ROLE_ADMIN перед ROLE_SUPER_ADMIN. Попробуйте по этому пути:
- { path: ^/backend/user, roles: ROLE_SUPER_ADMIN }
- { path: ^/backend, roles: ROLE_ADMIN }

2

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