3

セキュリティファイアウォールaccess_controlを構成して、すべてのページが匿名ユーザーに対して限定された情報を表示するようにするには (ログインは強制されないことに注意してください)、認証されたユーザーに対しては完全な詳細を表示するにはどうすればよいですか?

encoders:
    Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_AGENT: ROLE_USER

providers:
    agent_provider:
        memory:
            users:
                agent: { password: agentpass, roles: [ 'ROLE_AGENT' ] }
    user_provider:
        memory:
            users:
                user:  { password: userpass, roles: [ 'ROLE_USER' ] }

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
        anonymous: true
    agent_area:
        provider: agent_provider
        pattern:   ^/agent
        anonymous: ~
        form_login:
            login_path: agent_login
            check_path: agent_login_check
            default_target_path: /agent
        logout:
            path:   agent_logout
            target: /agent
    user_area:
        provider: user_provider
        pattern:   ^/
        anonymous: ~
        form_login:
            login_path: app_login
            check_path: app_login_check
            default_target_path: /
        logout:
            path:   app_logout
            target: /

access_control:
    - { path: ^/agent/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/agent, roles: ROLE_AGENT }
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_USER }

access_controlの最後の 2 行を削除すると、ログイン プロセスは期待どおりに機能しているように見えますが、is_granted('ROLE_USER') は、ユーザーがログインしている場合でも常に false を返します。

    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_USER }
4

1 に答える 1

3

twig のis_granted()関数を使用して、ユーザーとゲストに異なるコンテンツを表示できます。

{% if is_granted('IS_AUTHENTICATED_ANONYMOUSLY') %}

    {# ... only non logged-in users content ... #}

{% endif %}

... また ...

{% if is_granted('ROLE_USER') %}

   {# .. user's content ... #}

{% endif %}
于 2013-06-17T08:04:54.383 に答える