0

symfony のファイアウォールとアクセス制御の概念を完全には理解していないと思いますが、私の理解は次のとおりです。

FOSUserBundle をインストールして適切に構成しました。

私はいくつかの役割を作成しました:

role_hierarchy:
    ROLE_COACH:           [ROLE_USER]
    ROLE_EDITOR:          [ROLE_USER]
    ROLE_PREMIUM_COACH :  [ROLE_USER, ROLE_COACH]
    ROLE_ADMIN:           [ROLE_USER, ROLE_SONATA_ADMIN, ROLE_COACH, ROLE_EDITOR, ROLE_PREMIUM_COACH]
    ROLE_SUPER_ADMIN:     [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

ログインしていない場合、つまりロールROLE_USERを持っていない場合、URL /dashboardにアクセスできないようにしたい。

これが私のファイアウォールです:

firewalls:
    # -> custom firewall for the admin area of the URL
    admin:
        pattern:      /admin(.*)
        form_login:
            provider:       fos_userbundle
            login_path:     /admin/login
            use_forward:    false
            check_path:     /admin/login_check
            failure_path:   null
        logout:
            path:           /admin/logout
        anonymous:    true
    # -> end custom configuration

    # defaut login area for standard users
    main:
        pattern:      .*
        form_login:
            provider:       fos_userbundle
            csrf_provider:  form.csrf_provider
            login_path:     /login
            use_forward:    false
            check_path:     /login_check
            failure_path:   null
        logout:       true
        anonymous:    true

access_control の下に追加したものは次のとおりです。

    - { path: ^/dashboard, role: [ROLE_USER]}
    - { path: ^/dashboard/blog, role: [ROLE_EDITOR]}

接続していなくても、ページ /dashboard にアクセスできますが、それを可能にしたくありません。私は何を間違えていますか?

4

2 に答える 2

2

そのペーストビンから

- { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }

この行が問題の原因です。これは、すべてのユーザーがすべてにアクセスできることを symfony2 セキュリティ システムに伝えます (FOS のものを無視する場合、これは「最初のルール」です- { path: ^/OSC/dashboard, role: ROLE_USER}) 。

考えられる解決策:

1) その行を ACL の一番下に配置します。

長所: アプリケーションは動作します
短所: すべての ACL を適切に設定しないと、「セキュリティ」の問題が発生するか、承認されていないユーザーがロジックにアクセスする必要のないページにアクセスする可能性があります。

2)その行をまったく削除します

長所: アプリケーションはセキュリティの問題や不正アクセスの影響を受けません
短所: すべてのルートを明示的かつ適切に設定する必要がありますが、強力なアプリケーションを構築する場合、これはかなり「自然」です

于 2013-05-28T19:45:30.620 に答える
-1

あなたが通過している理由は、 用のファイアウォールがないためです/dashboardが、( をセットアップしようとしていると仮定するとSonataAdminBundle) それはあなたが持っているはずのものではありませんaccess_control

これが私の探し方ですSonata

access_control:
    - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/login-check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, role: ROLE_ADMIN }

    - { path: ^/.*, role: [IS_AUTHENTICATED_ANONYMOUSLY] }

それ以外の場合、ファイアウォールの定義は問題ありません。

独自のカスタム ダッシュボードを構成しようとしている場合は、ファイアウォールと非常によく似た別のファイアウォール エントリを定義する必要がありますadmin

編集

パターンを次のように変更してみてください。^/.*

すぐにブロックしたい場合/OSC/OSC(.*)

于 2013-05-21T03:04:07.757 に答える