2014-11-12 3 views
1

Я пытаюсь установить собственные роли в свой security.yml, поэтому после входа в систему пользователь может или не может получить доступ к главной странице (я использую ActiveDirectory).Symfony2 - Custom ROLES

Все, что я хочу, чтобы создать одну роль: ROLE_GUEST

Вот мой security.yml файл:

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

Если я хорошо понял, это то, как я прочитал эти роли:

  • Пользователь, который имеет роль «ROLE_GUEST», может видеть только страницу, для которой требуется «ROLE_GUEST»
  • Пользователь, у которого есть роль «ROLE_USER», также может видеть любой pa GE, которая требует «» ROLE_GUEST
  • «Пользователь, который имеет„ROLE_ADMIN“роль также может увидеть любую страницу, которая требует„ROLE_GUEST“и« ROLE_USER»
  • и т.д ...

Затем я установить access_control как:

access_control: 
    - { path: ^/$, role: ROLE_USER } 

То, что я хочу в этом access_control, чтобы ограничить доступ к главной странице только ROLE_USER. Я уже установил роль по умолчанию для ROLE_GUEST, когда пользователь впервые вступил в систему. Но даже если я поместил ROLE_USER, как показано выше, я могу получить доступ к главной странице с пользователем, у которого есть ROLE_GUEST.

Любая идея, как я могу заставить это работать?

Спасибо!

ответ

1

Хорошо, я понял.

По-видимому, FOS User bundle автоматически добавляет ROLE «ПОЛЬЗОВАТЕЛЬ» к каждому пользователю, даже если вы не сказали об этом в своем сущности пользователя (вы можете проверить его на профилировщике).

Итак, предполагая, что вы хотите использовать ROLE, имейте в виду, что ROLE_USER всегда будет нижней РОЛ, так как каждый будет иметь его.

Исправьте меня, если я ошибаюсь!

О также я исправил свой брандмауэр и access_control (если это может помочь кому-то):

настройки Роль иерархии:

role_hierarchy: 
     ROLE_CUSTOM:  [ROLE_USER] 
     ROLE_ADMIN:  [ROLE_CUSTOM] 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN] 

межсетевые экраны настройки:

firewalls: 
     main: 
      pattern: ^/ 

настройки контроля доступа :

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, role: ROLE_ADMIN } 
    - { path: ^/, role: ROLE_CUSTOM } // IMPORTANT TO BE THE LAST ONE 
1

Ваше регулярное выражение кажется проблемой, ^/$ соответствует только одному / и больше ничего. Это то, что вы имеете в виду, я предполагаю:

access_control: 
    - { path: ^/.*, role: ROLE_USER } 

Кроме того, ваша иерархия роль может быть упрощена:

role_hierarchy: 
    ROLE_USER:  [ROLE_GUEST] # ROLE_USER implies ROLE_GUEST 
    ROLE_ADMIN:  [ROLE_USER] # ROLE_ADMIN implies ROLE_USER 
    ROLE_SUPER_ADMIN: [ROLE_ADMIN] # and so on ... 

Эта страница из документации очень полезно, чтобы понять концепцию позади избирателей безопасности: http://symfony.com/doc/current/cookbook/security/voters_data_permission.html

В symfony 2.6 упрощено оформление индивидуальных избирателей: http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters

И есть видеовстреча одукция по скупированности канал YouTube: https://www.youtube.com/watch?v=fF8tpdlnyaE

+0

Спасибо за ответ, но это не то, что я хочу. Как я уже сказал, я использую ActiveDirectory, поэтому каждый пользователь может войти в систему. Но я не хочу, чтобы все имели одинаковый доступ, поэтому я хочу, чтобы ПОЛЬЗОВАТЕЛЬ получал доступ к сайту и ADMIN для доступа к сайту + ADMIN. – Anthony

+0

Извините, я полностью проигнорировал заметку активного каталога ...: P Но ваше регулярное выражение в части access_controll может быть проблемой в любом случае. Я обновил свой ответ соответственно. –

+0

Нет ... У меня уже была эта проблема с REGEX, и единственное, что работает, это '^/$'. Ваш, '^ /. *' Выполняет ошибку перенаправления. Кроме того, когда я устанавливаю пользователя ROLE_USER и ограничиваю основную страницу только ADMIN, он работает: я получаю ошибку 403 - Forbidden. Поэтому я думаю, что это скорее проблема пользовательской роли, чем что-либо еще (я надеюсь). – Anthony