最近まで、一般に公開されている領域 (/ および /whatever) と、ROLE_USER を必要とする保護された領域 (/portal および /portal/whatever) がありました。ここで、ROLE_ADMIN を必要とするセキュリティで保護された領域内に管理領域を作成したいと考えています。(/portal/admin および /portal/admin/whatever)。
security.yml は次のようになります。
firewalls:
login_firewall:
pattern: ^/portal/login$
anonymous: ~
secured_area:
pattern: ^/portal
form_login:
login_path: portal_login
check_path: login_check
default_target_path: portal_dashboard
logout:
path: portal_logout
target: portal_dashboard
http_basic:
realm: "MyFreelancer Client Portal"
access_control:
- { path: ^/portal/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/portal/, roles: ROLE_USER }
- { path: ^/portal/admin, roles: ROLE_ADMIN }
3行目を追加しました。私の問題は、ROLE_USER を持つユーザーがまだ ^/portal/admin にアクセスできることです。なぜこれが機能しないのか、誰かが私に説明してもらえますか?
別の方法として、管理領域を /admin および /admin/whatever の下に置くこともできますが、これにはまったく異なるファイアウォール コンテキストが必要であり、その方法がよくわかりません。試してみましたが、/portal/ に戻り続け、/admin/ を参照すると、再度ログインするように求められ、再び /portal/ に戻ります (無限ループ)。
補助的な回答として、ユーザー領域と管理領域の単一のファイアウォール コンテキストと個別のファイアウォール コンテキストの長所と短所、およびこれがどのように実装されているか (必要な場合) を説明していただけないでしょうか。
前もって感謝します。
更新:下の 2 行を入れ替えるだけで問題が解決することがわかりました。これは、2 行目が順次実行され、ROLE_USER のみが必要な 2 行目に対して /portal/admin/ が実行されるためです。別のファイアウォール コンテキストで管理領域を実行する方がよいかどうか、またその理由と、そうである場合はその方法について、誰かが私に何らかの洞察を与えることができれば?