2016-04-15 2 views
0

У меня есть 3 роли в моем проекте:Symfony конфигурации брандмауэра для общего защищенной области

admin=> /admin 
customer=> /customer 
therapist=> /therapist 

Я CONFIG брандмауэров безопасности и работают правильно. Но мне нужно знать, что пользователь пользователя зарегистрирован или пользовательская форма терапевта за пределами защищенной зоны. Есть ли способ настроить брандмауэр для доступа к общей защищенной области? Если я изменю шаблон клиента и терапевта в /, брандмауэр клиента не будет работать. это мой security.yml

security: 
    encoders: 
     Utab\AdminBundle\Entity\User: 
      algorithm: bcrypt 
     Arg\TherapistBundle\Entity\User: 
      algorithm: bcrypt 
     Shop\CustomerBundle\Entity\User: 
      algorithm: bcrypt 
    providers: 
     admin_provider: 
      entity: 
       class: 'UtabAdminBundle:User' 
     therapist_provider: 
      entity: 
       class: 'ArgTherapistBundle:User' 
     shop_customer_provider: 
      entity: 
       class: 'ShopCustomerBundle:User' 
    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 
     admin_firewall: 
      pattern: /admin/.* 
      simple_form: 
       provider: admin_provider 
       check_path: admin_login_check 
       login_path: admin_login 
       failure_path: admin_login 
       default_target_path: admin_profile 
       authenticator: google_recaptcha_authenticator 
       failure_forward: true 
      logout: 
       path: admin_logout 
       target: admin_login 
      anonymous: true 

     therapist_firewall: 
      pattern: /therapist/.* 
      simple_form: 
       provider: therapist_provider 
       check_path: therapist_login_check 
       login_path: therapist_login 
       failure_path: therapist_login 
       default_target_path: therapist_profile 
       authenticator: google_recaptcha_authenticator 
      logout: 
       path: therapist_logout 
       target:/
      anonymous: true 
     shop_customer_firewall: 
      pattern: /customer/.* 
      simple_form: 
       provider: shop_customer_provider 
       check_path: shop_customer_login_check 
       login_path: shop_customer_login 
       failure_path: shop_customer_login 
       default_target_path: shop_customer_profile 
       authenticator: google_recaptcha_authenticator 
      logout: 
       path: shop_customer_logout 
       target: shop_customer_login 
      anonymous: true 

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

ответ

1

Вы можете получить доступ только вошедшего в систему пользователя (и его роли) в текущем брандмауэре. Если брандмауэр не определен для текущего URL-адреса, вы не можете получить доступ к данным.

Однако есть решение. Сделайте один большой брандмауэр вместе с тремя текущими брандмауэрами. Затем используйте Access Control для ограничения доступа к суб-URL-адресам. Вы должны определенно подумать о различных пользовательских объектах, которые вы используете сейчас.

Пример:

# app/config/security.yml 
security: 
    # ... 
    access_control: 
     - { path: ^/admin, roles: ROLE_ADMIN } 
     - { path: ^/customer, roles: ROLE_CUSTOMER } 
     - { path: ^/therapist, roles: ROLE_THERAPIST } 

также прочитать documentation.

+0

Я уже настроил свой ACL, но вам нужно получить доступ с внешней стороны брандмауэра !!! Я решаю эту проблему, используя временную сессию. Я заполняю ее в файле success_handler формы входа и получаю доступ к ней со стороны! – mgh

Смежные вопросы