2014-10-09 43 views
1

我在使用FosUserBundle基于Symfony2在我的应用中配置两个防火墙时遇到问题。我想要的是,我的网站上的客户安全区域,前端安全区域和后端安全区域。我设法做的是,我确实有两个部分(/ shop)和(/ admin),到目前为止他们正在工作,但问题是,即使我登录商店窗体或管理员窗体时不断将我重定向到相同的方向(/)。两个防火墙 - 登录后重定向 - fosuser

这是我security.yml:

jms_security_extra: 
secure_all_services: false 
expressions: true 

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

role_hierarchy: 
    ROLE_CUSTOMER: ROLE_USER 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: ROLE_ADMIN 

providers: 
    fos_userbundle: 
     id: fos_user.user_provider.username 

firewalls: 
    admin_secured: 
     context: site 
     pattern: ^/admin/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
      use_referer: true 
      always_use_default_target_path: true 
      default_target_path: /admin/ 
      login_path: /login 
      check_path: /admin/login_check 
     logout: 
      path: /admin/logout 
     anonymous: false 
    main: 
     context: site 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
      default_target_path:/
      target_path_parameter: redirect_url 
      login_path: frd_login 
     logout: 
      path: fos_user_security_logout 
      target: frd_home 
     anonymous: true 

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

而我config.yml大块:

fos_user: 
db_driver: propel 
firewall_name: main 
user_class: FOS\UserBundle\Propel\User 
group: 
    group_class: FOS\UserBundle\Propel\Group 

同样,当我登录上/管理/shop(< - 它是为客户)它将我重定向到家(/),但是从我assue,在管理部分应该我重定向到/管理/并在铺段到/像它的每一种情况下的配置。

需要一些帮助。我没有错过什么?

回答

0

您可能想要更改一些有关如何命名URL的信息。我认为Symfony会感到困惑,因为当你进入管理登录页面(/ login)时,你实际上使用的是'主'防火墙,而不是'admin_secured'防火墙(请注意,为了使用管理员防火墙,必须以pattern'/ admin'开头)。所以试试这样的防火墙设置:

firewalls: 
    admin_secured: 
     context: site 
     pattern: ^/admin/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
      #use_referer: true # this is not needed if you always use default target 
      always_use_default_target_path: true 
      default_target_path: /admin/ 
      login_path: /admin/login 
      check_path: /admin/login_check 
     logout: 
      path: /admin/logout 
     anonymous: false 
    main: 
     context: site 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
      default_target_path:/
      target_path_parameter: redirect_url 
      login_path: /shop/login 
      check_path: /shop/login_check 
     logout: 
      path: fos_user_security_logout 
      target: frd_home 
     anonymous: true 

access_control: 
    - { path: ^/shop/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/shop/, role: ROLE_USER } 
    - { path: ^/admin/, role: ROLE_SUPER_ADMIN } 
    # allow all other URLS to be accessed without authentication (may or may not be what you want) 
    - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY } 

给这个镜头,希望它会为你工作。

+0

所以,你说我已经创建了一个新的路线,前缀为/ admin的权利?在这个解决方案中,路由/登录不会被使用。你确定它很好? – 2014-10-10 07:25:47

+0

实际上,对于主防火墙,您可以使用默认路由(/ login&/ login_check),因为您为管理员的防火墙使用了前缀 – Snroki 2014-10-10 07:41:29

+0

这就是我正在做的事情,但默认/ admin/login窗体将我重定向到主页面,但它应该到管理后台(fe/admin/pages)。 – 2014-10-10 08:02:21