私は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 }