0

私はsymfony2とFOSUserBundleを使用しています。ログイン用に 1 つのファイアウォール、アセット用に 1 つ、すべてをキャッチするメインのファイアウォールがあります。それでも、ルートがファイアウォールでカバーされておらず、「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

編集/解決策: 私の問題は正規表現でした。そのチュートリアルについて誤解がありました。そのため、パターンはプレーンな RegEx になっているため、ファイアウォールがすべて機能しませんでした (回答を参照)。新しい設定は次のとおりです。

  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 に答える