5

管理者と標準ユーザーがそれぞれ別のセキュリティ プロバイダーによって処理されるシステムがあります。管理者は、メイン サイトにもサインインしていない限り、メイン サイトのファイアウォールの背後にあるファイルや画像にアクセスできないため、これにより管理ページで問題が発生しました。

イメージとファイルは、プロバイダーに関係なく、認証されたすべてのユーザーと管理者がアクセスできる必要があります。それらは、よりきめ細かいアクセス制御を提供するコントローラーを通じて提供されます。

ルートへのアクセスを許可するために複数のプロバイダーを定義することは可能ですか?

以下は、現在の security.yml を簡略化したバージョンです。

security:
    providers:
        admin_user_db:
            entity: { class: OurAdminUserBundle:AdminUser, property: username }
        site_user_db:
            entity: { class: OurSiteUserBundle:SiteUser, property: username }
    firewalls:
        admin_login:
            pattern:  ^/admin/login$
            security: false
        site_user_login:
            pattern: ^/login
            security: false
        file_route:
            pattern: ^/file
            anonymous: ~
            ### We need to allow this route only for authorized users from
            ### either admin_user_db or site_user_db providers
        admin_secured_area:
            pattern: ^/admin
            http_basic: ~
            provider: admin_user_db
            form_login:
                check_path: /admin/login_check
                login_path: /admin/login
            logout:
                path:   /admin/logout
                target: /
        site_secured_area:
            pattern: .*
            http_basic: ~
            provider: site_user_db
            form_login:
                check_path: /check_login
                login_path: /login
                failure_path: /login
                failure_forward: false
            logout:
                path:   /logout
                target: /
4

2 に答える 2

1

私はこの問題の経験があり、解決策はMattが書いたものでした。

ただし、アプリケーションには管理者、生徒、および教師のファイアウォールがあったため、必要なときに偽装を成功させることができませんでした。つまり、管理からのユーザーは、ファイアウォールからのユーザーになりすますことができます。

今、私が何か間違ったことをした可能性がありますが、これは時間に敏感なタスクだったので、すべてを単一のファイアウォールの背後に置き、さまざまな役割に任せることにしました. これははるかに簡単な解決策であることが判明しましたが、最終的にはあなた次第です...

于 2012-10-09T21:30:26.807 に答える