2014-12-02 2 views
0

Я пытаюсь сделать раздел admin доступным только для пользователей-администраторов, использующих FOSUserBundle.Управление доступом FOSUserBundle для раздела admin разрешает анонимным пользователям

Однако, если я перехожу к адресу администратора (www.foo.local/app_dev.php/admin) без аутентификации, он позволяет мне получить доступ.

В панели инструментов отладки Symfony это показывает Logged in as anon.

Я настроил FOSUserBundle после official documentation

Вот в security.yml конфигурации:

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: sha512 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: ROLE_ADMIN 

    providers: 
     fos_userbundle: 
      id: fos_user.user_provider.username 

    firewalls: 
     main: 
      pattern: ^/ 
      form_login: 
       provider: fos_userbundle 
       csrf_provider: form.csrf_provider 
      logout:  true 
      anonymous: true 

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

Я не знаю, почему это не запрашивает ROLE_ADMIN, чтобы разрешить доступ к разделу администрирования, какие-либо идеи?

ответ

1

Я предполагаю, что это потому, что ваше правило говорит

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

что означает

www.foo.local/app_dev.php/admin/one 
www.foo.local/app_dev.php/admin/two 

Обратите внимание на '/' после того, как администратор

где

www.foo.local/app_dev.php/admin 

не удовлетворяет правилу, потому что он отсутствует «/» в конце

попытаться изменить правила, чтобы быть

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