FOS: Несанкционированный пользователь получает доступ к определенному URL-адресу


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

Заранее благодарю

Безопасность.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".
Author: BentCoder, 2014-09-22

2 answers

Управление доступом использует первое правило соответствия для обеспечения доступа, поэтому ваши правила останавливаются на - { 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
Author: qooplmao, 2014-09-22 09:17:13

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

 2
Author: Srdjan, 2014-09-22 09:16:50