0

私はsymfony2を使用していますが、symfonyファイアウォールでの認証とアクセス制御について少し問題があります。

これは私の security.yml です

security:
    encoders:
        test\UserBundle\Entity\User:
        algorithm:        sha1
        encode_as_base64: false
        iterations:       1

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]

providers:
    administrators:
        entity: { class: UserBundle:User, property: email }

firewalls:

    login_firewall:
        pattern:    ^/login$
        anonymous:  ~
        security: true

    admin_area:
        pattern:    ^/cp|/(cp/.*|login_check)
        http_basic: ~
        form_login:
            login_path:  _login
            check_path:  login_check
            always_use_default_target_path: true

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY|ROLE_USER }
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/(booking/hotelsearchresult), roles: IS_AUTHENTICATED_ANONYMOUSLY }

問題はこのサイトにあり、管理者用の /admin パスまたは特定のパスはありません。管理者は各ページの役割によって定義され、ページの内容はユーザーの種類によって異なります。(それは私が知っている悪いことです)。

つまり、一部を除くすべてのページにすべてのユーザーがアクセスできるようにする必要があり、ログインすると、さまざまな種類のデータが取得されます。

しかし、私は次のエラーがあります:

ログインして、ユーザーを別のパス (保護されたパスとして定義されていない) に送信すると、信用情報が表示されませんか?!!!

この構造を持つデータを取得してアクセスするにはどうすればよいですか?

4

2 に答える 2

1

まさにあなたが書いたもの:パスがファイアウォールの下にない場合、ファイアウォールがそれらをカバーしないため、資格情報はそこで利用できません.

特定のケースでは、で始まるルートでのみ資格情報にアクセスできます/cpおそらくやりたいことは、ファイアウォールパターンを として定義することです^/。ファイアウォールがWeb サイトのすべてのaccess_controlパスをカバーするようにしてから、または任意の方法を使用して、特定のページのアクセス許可を確認します。

于 2013-12-01T09:42:56.243 に答える
0

コントローラーで次のコードを使用して、特定のユーザーが持つ役割を確認できます。

public function indexAction()
{
    // show different content to admin users
    if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
        // ... load admin content here
    }

    // ... load other regular content here
}
于 2013-12-01T11:48:46.540 に答える