实时调试 Symfony 3.4 - 403 页面,可能存在用户角色问题

Debugging Symfony 3.4 live - 403 page, possible User Roles issue

我在使用用户角色登录时单击 link 进入 /admin/stats 页面时出现 403 错误:ROLE_EXPL应该可以访问该页面。它适用于 ROLE_ADMIN,它也可以访问此页面。

查看代码,存在三个用户角色,link 问题页面 /admin/stats 未显示在菜单上用户角色 ROLE_PASS 但适用于其他人。但是,此 link 为 ROLE_EXPL 提供 403 错误,但对 ROLE_ADMIN

工作正常

有人可以建议从哪里开始调试吗?

代码: security.yaml

security:

    encoders:
        AppBundle\Entity\Pass:
            algorithm: bcrypt

    providers:
        pass_provider:
            entity:
                class: AppBundle:Pass
                property: username

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

        main:
            anonymous: ~
            provider: pass_provider
            switch_user: true
            form_login:
                login_path: login
                check_path: login
                default_target_path: /home
                always_use_default_target_path: true
            logout:
                path:   /logout
                target: /login
            logout_on_user_change: true
            remember_me:
                secret:   '%kernel.secret%'
                lifetime: 604800 # 1 week in seconds
                path:     /home

    role_hierarchy:
        ROLE_PASS:           ROLE_USER
        ROLE_EXPL:           ROLE_USER
        ROLE_ADMIN:          ROLE_USER

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: '%https%' }
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
        - { path: ^/forgotten_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
        - { path: ^/reset_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
       

要求的结果:

ROLE_EXPL 应该可以访问页面 /admin/stats

如果具有角色 ROLE_EXPL 的任何用户应该有权访问 /admin/stats,您需要更改 access_control 设置。目前它说:

        - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: '%https%' }

...这意味着:只有角色为 ROLE_ADMIN 的用户才能访问以 /admin

开头的路径

我需要在 security.yaml 文件中为 /admin/stats[=26 添加额外的行或“安全模式” =] URL.

正如 Nico 所指出的,只有角色为 ROLE_ADMIN 的用户才能访问以 /admin

开头的路径

因此,我在 ^/admin 路径下方添加了以下行,但这没有用。我将它移到该路径上方并且它起作用但随后破坏了其他用户的页面,因此安全模式的顺序非常重要

{ path: ^/admin/stats, roles: ROLE_EXPL, requires_channel: '%https%' } 

我发现您可以添加多个角色,这很有效:

 access_control:
        - { path: ^/admin/stats, roles: [ROLE_EXPL,ROLE_ADMIN], requires_channel: '%https%' }
        - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: '%https%' }
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
        - { path: ^/forgotten_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }
        - { path: ^/reset_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: '%https%' }