1

ROLE_UNFILLED_USER ロールを持つユーザーを除くすべてのページへのアクセスを拒否する必要があります。security.yml で access_control を使用してこれを行うにはどうすればよいですか

4

3 に答える 3

1

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/worksheet403 (禁止) が表示されます。他のルートを追加する場合は、正しい順序で並べてください。symfony は、最初に見つかった一致するルートを使用します。これは、より具体的なルートがリストの一番上にあり、より一般的なルートが一番下にあることを意味します!

ROLE_USERextends以来 ROLE_UNFILLED_USER、そのロールを持つユーザーはすべてのページ (ワークシートを含む) にアクセスできます。

ただし、ユーザーがログインすると、指定された target_path または以前に要求されたパスに自動的にリダイレクトされます。これは、ユーザーがログインすると、おそらく 403 ページが表示され、アクセスできない理由について混乱することを意味します。解決策: カスタムAuthenticationProviderを作成します(特にListenerを見てください)。

于 2012-12-05T13:00:14.840 に答える
0

ログイン リスナーを使用して、ユーザーが特定の役割を持っている場合はリダイレクトする必要があります。または、リクエストリスナーを使用するだけかもしれません。

于 2015-11-17T12:52:23.197 に答える