0

我正在使用 symfony2 和 FOSUserBundle。我有一个用于登录的防火墙,一个用于资产的防火墙,一个用于捕获所有内容的主要防火墙。当路由未被任何防火墙覆盖并且您尝试使用“is_granted”访问它时,我仍然会抛出“no security.context”异常(在此处查看并解决)。路线是 mydomain/de_DE/area,其中 de_DE 部分显然是我的 {_locale}。这是我的 config.yml 中的 FOSUserBundle 配置。

  firewalls:
    login_firewall:
      pattern:    ^/(de_DE|de_CH)/(login|resetting)$
      anonymous:  true
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout
    assets_localeless:
      pattern:    ^/(compiled|web|js|css|_wdt|_profiler)/$
      anonymous:  true
    main:
      pattern: ^/$
      anonymous:  false
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout

  access_control:
    - { path: ^/(compiled|web|js|css|_wdt|_profiler)$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/(de_DE|de_CH)/(login|resetting)$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/(de_DE|de_CH)/(my-admin|admin), role: ROLE_ADMIN }
    - { path: ^/(de_DE|de_CH)/$, role: ROLE_USER }

  role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

编辑/解决方案:我的问题是正则表达式。我对那个教程有误解。所以模式是普通的正则表达式,这就是为什么我的防火墙都不起作用(见答案)。新设置是这样的:

  firewalls:
    main:
      pattern: .
      anonymous:  true
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout

  access_control:
    - { path: '^/(compiled|web|js|css|_wdt|_profiler)([\w\d/_-]{0,})', role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/([\w]{0,})/(login|resetting|sale|imprint|contact)([\w\d/_-]{0,})', role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/([\w]{0,})/(my-admin|admin)([\w\d/_-]{0,})', role: ROLE_ADMIN }
    - { path: '^/([\w]{0,})/([\w\d/_-]{0,})', role: IS_AUTHENTICATED_FULLY }
4

1 回答 1

1

没有为mydomain/de_DE/area配置防火墙...这就是为什么您没有该路由的 security.context 的原因。

$ 表示以正则表达式结尾。这就是为什么..

- { path: ^/(de_DE|de_CH)/$, role: ROLE_USER }

...只会完全匹配...

yourdomain/de_DE/
yourdomain/de_CH/

......没有其他路线。

于 2013-06-12T10:26:29.293 回答