1

我在 symfony2 中使用了基本的登录表单,它运行良好(没有 FOSUSERBUNDLE)。但是如果用户已经通过身份验证,如何限制访问?

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

上面的代码不起作用,因为登录路由不在防火墙下......并抛出:

安全上下文不包含身份验证令牌。一个可能的原因可能是没有为此 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 回答