1

我有这个 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 时,他们将被重定向到 /profile,如果 ROLE_ADMIN 然后是 /admin。我使用以下解决方案执行此操作How to redirect to different url based on roles in symfony 2

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

4

1 回答 1

0

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

于 2013-09-19T12:58:17.057 回答