1

symfony2 で基本的なログインフォームを使用しましたが、うまく機能します ( FOSUSERBUNDLE なし)。しかし、ユーザーがすでに認証されている場合、アクセスを制限するにはどうすればよいでしょうか?

if ($this->get('security.context')->isGranted('ROLE_ADMIN')) { }

ログインルートがファイアウォールの下にないため、上記のコードは機能しません...そしてスロー:

セキュリティ コンテキストに認証トークンが含まれていません。考えられる理由の 1 つは、この URL にファイアウォールが構成されていないことです。

それを解決する方法?

4

2 に答える 2

2

前述のように、トークン/認証済みユーザーにアクセスする場合は、ログイン URL がファイアウォールの下にある必要があります。これにより、匿名アクセスと適切なアクセス制御ルールが許可されます。

firewalls:
    main:
        pattern: ^/
        # firewall settings
        anonymous:    true

access_control:
    - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: ROLE_USER }
于 2013-07-11T12:28:23.357 に答える
0

ファイアウォールを使用する必要があります ファイアウォール
の例:

firewalls:
         main:
            pattern: ^/
            form_login:
                check_path: /
                login_path: /
                always_use_default_target_path: true
                default_target_path: /main
            logout:
                path: /logout
                target : /
            anonymous: true
            security: true

    access_control:
        - { path: ^/main, roles: ["ROLE_USER","ROLE_ADMIN"] }
        - { path: ^/admin, roles: ["ROLE_ADMIN"] }

http://symfony.com/doc/current/components/security/firewall.html

于 2013-07-11T11:49:19.800 に答える