мой 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".
Контроль доступа использует первое соответствующее правило для обеспечения доступа, поэтому ваши правила останавливаются на - { 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 }
В вашем коде шаблон регулярного выражения соответствует ROLE_ADMIN перед ROLE_SUPER_ADMIN. Попробуйте по этому пути:- { path: ^/backend/user, roles: ROLE_SUPER_ADMIN }
- { path: ^/backend, roles: ROLE_ADMIN }