基于角色重定向用户时未找到令牌

时间:2013-09-13 02:40:50

标签: symfony-2.2

我有这个security.yml文件:

...
security:
    encoders:
        Trainme\RestBundle\Document\User:
          id: security.encoder.blowfish

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

    providers:
        trainme_admin_provider:
            id: trainme_admin.user_provider

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        secured_admin:
            pattern:    ^/admin
            form_login:
                check_path: trainme_security_check
                login_path: trainme_login
                default_target_path: trainme_dashboard
            logout:
                path:   trainme_logout
                target: trainme_redirect_route

    access_control:
      - { path: ^/admin, roles: ROLE_ADMIN }
      - { path: ^/profile, roles: ROLE_TRAINER }

当用户的角色是ROLE_TRAINER时,如果ROLE_ADMIN然后是/ admin,他们将被重定向到/ profile。我使用以下解决方案How to redirect to different url based on roles in symfony 2执行此操作。

问题是: 当看一下/ profile中的调试工具栏时,它说我没有经过身份验证。为什么我没有通过身份验证?我已经使用登录表单登录了。但是当我以ROLE_ADMIN身份登录并且我在/ admin中时,它表示我已通过身份验证。

1 个答案:

答案 0 :(得分:0)

只有在请求的网址位于防火墙后面时才会触发身份验证过程。您的防火墙仅适用于模式^ / admin。如果您希望防火墙在整个站点中处于活动状态,则应将模式设置为^ /并使用访问控制部分来定义站点不同区域的特定角色(如您所做)。或者,您可以根据需要设置第二个防火墙,但通常一个具有适当访问控制的防火墙就足够了。