1

セキュリティで保護されていない領域から app.user を取得するにはどうすればよいですか?

^/userから始まる領域を確保しました。

しかし、誰もがアクセスでき、セキュリティで保護されていない領域にログアウト フォームを表示する必要があります。これはどのように可能ですか?私のsecurity.yml:

安全:
    エンコーダ:
        Symfony\Component\Security\Core\User\User: 平文
        ###:
            アルゴリズム: sha512
            base64 としてエンコード: true
            反復: 10
        ###:
            アルゴリズム: sha512
            base64 としてエンコード: true
            反復: 10

    role_hierarchy:


    プロバイダー:
      管理者:
        名前: 管理者
        エンティティ: { クラス: ###、プロパティ: ログイン }
      ユーザー:
        名前: ユーザー
        エンティティ: { クラス: ###、プロパティ: ログイン }        

    ファイアウォール:
      管理者:
        パターン: ^/admin
        フォームログイン:
          login_path: ##_login
          check_path: ###_login_process
          default_target_path: /admin/dashboard
        匿名: ~
        ログアウト:
          パス: /admin/logout
          ターゲット: /admin/login
        プロバイダー: 管理者
        私を覚えてますか:
            鍵: "###"
            寿命: 604800
            道: /
            ドメイン: ~
      ユーザー:
        パターン: ^/ユーザー
        フォームログイン:
          login_path: ##_login
          check_path: ###_login_process
          default_target_path: ###
        匿名: ~
        ログアウト:
          パス: /user/logout
          ターゲット: /user/login
        プロバイダー: ユーザー
        私を覚えてますか:
            鍵: "###"
            寿命: 604800
            道: /
            ドメイン: ~             


    アクセス制御:        
        - { パス: ^/admin/login、役割: IS_AUTHENTICATED_ANONYMOUSLY }
        - { パス: ^/admin/、ロール: ROLE_ADMIN }
        - { パス: ^/user/login、役割: IS_AUTHENTICATED_ANONYMOUSLY }
        - { パス: ^/user/、ロール: ROLE_USER }                   
4

2 に答える 2

1

さて、security.ymlを少し変更しました。したがって、現在すべてが正常に機能しています。

      ユーザー:
        パターン:^ /   


    アクセス制御:
        -{パス:^ /、役割:IS_AUTHENTICATED_ANONYMOUSLY}
        ..。

更新1

access_controllの行は必要ないようです。さらに、何らかの理由で(キャッシュである可能性があります)匿名ユーザーが/userエリアにアクセスしていました

于 2012-07-28T17:02:59.640 に答える
0

Symfony のセキュリティは、認証と承認という 2 つの異なるメカニズムに依存しているため、安全でない領域で app.user を取得できます。

認証はファイアウォールによって定義されます。ファイアウォールの下に入るとすぐにトークンを取得し、最終的には app.user を取得しますanonymous

承認access_controlはルールに関連しています。これは 2 番目のステップです。ファイアウォールの外側にアクセス制御ルールを配置することはできません。そこで、ROLE 要件に対処します。たとえば、十分な場合ROLE_ANONYMOUS、必要な場合はROLE_USER...

もう 1 つ: もう少し複雑にするために、ファイアウォールは匿名ユーザーを許可または禁止することができます。デフォルトではtrueです.loginとlogin_checkパスをファイアウォールの下に置く必要がありますが、ユーザーにそれ以外の役割を要求することROLE_ANONYMOUSできません(そうすると、無限ループが発生します)。

于 2016-07-26T08:35:05.647 に答える