ROLE_UNFILLED_USER ロールを持つユーザーを除くすべてのページへのアクセスを拒否する必要があります。security.yml で access_control を使用してこれを行うにはどうすればよいですか
3 に答える
ROLE_USER
最初のステップは、から継承するロール階層を定義することROLE_UNFILLED_USER
です。
# app/config/security.yml
role_hierarchy:
ROLE_USER: ROLE_UNFILLED_USER # <-- This is the crucial part
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_API_USER, ROLE_ADMIN]
これで、アクセス制御を配置できます。
access_control:
- { path: "^/user/worksheet", roles: ROLE_UNFILLED_USER }
- { path: "^/bill", roles: ROLE_USER }
- { path: "^/address_book", roles: ROLE_USER }
- { path: "^/friendinvite", roles: ROLE_USER }
- { path: "^/admin", roles: ROLE_ADMIN }
#- { path: "^/", roles: IS_AUTHENTICATED_ANONYMOUSLY }
ロールを持つユーザーがROLE_UNFILLED_USER
ルート以外のルートにアクセスしようとすると、常に^/user/worksheet
403 (禁止) が表示されます。他のルートを追加する場合は、正しい順序で並べてください。symfony は、最初に見つかった一致するルートを使用します。これは、より具体的なルートがリストの一番上にあり、より一般的なルートが一番下にあることを意味します!
ROLE_USER
extends以来 ROLE_UNFILLED_USER
、そのロールを持つユーザーはすべてのページ (ワークシートを含む) にアクセスできます。
ただし、ユーザーがログインすると、指定された target_path または以前に要求されたパスに自動的にリダイレクトされます。これは、ユーザーがログインすると、おそらく 403 ページが表示され、アクセスできない理由について混乱することを意味します。解決策: カスタムAuthenticationProviderを作成します(特にListenerを見てください)。
ログイン リスナーを使用して、ユーザーが特定の役割を持っている場合はリダイレクトする必要があります。または、リクエストリスナーを使用するだけかもしれません。