Symfony忽略fosuser自定义角色

Symfony忽略fosuser自定义角色,symfony,fosuserbundle,hierarchy,roles,Symfony,Fosuserbundle,Hierarchy,Roles,这是我的安全措施 security: encoders: FOS\UserBundle\Model\UserInterface: bcrypt role_hierarchy: ROLE_CLINICIAN: ROLE_USER ROLE_ADMIN: ROLE_CLINICIAN ROLE_OWNER: ROLE_ADMIN ROLE_SUPER_ADMIN: ROLE_

这是我的安全措施

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_CLINICIAN:   ROLE_USER
        ROLE_ADMIN:       ROLE_CLINICIAN
        ROLE_OWNER:       ROLE_ADMIN
        ROLE_SUPER_ADMIN: ROLE_OWNER

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

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

        main:
            pattern: ^/
            form_login:
                provider:       fos_userbundle
                csrf_provider:  security.csrf.token_manager
            logout:    true
            anonymous: ~

    access_control:
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: /, roles: ROLE_USER }
        - { path: ^/, roles: ROLE_ADMIN }
        - { path: ^/api, roles: ROLE_OWNER }
        - { path: ^/api, roles: ROLE_SUPER_ADMIN }
        - { path: ^/api/clinics, roles: ROLE_CLINICIAN }
我应该有这样的角色层次结构

 ROLE_CLINICIAN
       |
   ROLE_ADMIN
       |
   ROLE_OWNER
       |
ROLE_SUPER_ADMIN

但是symfony忽略了它,现在我想让角色\u临床医生只能访问
路径:^/api/clinics
页面,但是这个角色仍然可以访问每个页面

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN:       ROLE_CLINICIAN
        ROLE_OWNER:       ROLE_ADMIN
        ROLE_SUPER_ADMIN: ROLE_OWNER

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

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

        main:
            pattern: ^/
            form_login:
                provider:       fos_userbundle
                csrf_provider:  security.csrf.token_manager
            logout:
                path:   fos_user_security_logout
                target: fos_user_security_login
            anonymous: ~

    access_control:
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api/clients, roles: ROLE_CLINICIAN }
        - { path: ^/api, roles: ROLE_SUPER_ADMIN }
        - { path: ^/api, roles: ROLE_OWNER }
        - { path: ^/#/, roles: ROLE_USER }
路径:^/授予对我的应用程序中所有页面的访问权限,以便ROLE_用户的每一位家长都可以访问每个页面,但是


记住,匹配的第一条规则是使用的
,所以技巧是将-{path:^/#/,roles:ROLE_USER}放在列表的末尾。

以下是有效的解决方案

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN:       ROLE_CLINICIAN
        ROLE_OWNER:       ROLE_ADMIN
        ROLE_SUPER_ADMIN: ROLE_OWNER

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

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

        main:
            pattern: ^/
            form_login:
                provider:       fos_userbundle
                csrf_provider:  security.csrf.token_manager
            logout:
                path:   fos_user_security_logout
                target: fos_user_security_login
            anonymous: ~

    access_control:
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/api/clients, roles: ROLE_CLINICIAN }
        - { path: ^/api, roles: ROLE_SUPER_ADMIN }
        - { path: ^/api, roles: ROLE_OWNER }
        - { path: ^/#/, roles: ROLE_USER }
路径:^/授予对我的应用程序中所有页面的访问权限,以便ROLE_用户的每一位家长都可以访问每个页面,但是


记住,匹配的第一条规则是使用的
,所以技巧是将-{path:^/#/,roles:ROLE_USER}放在列表的末尾。

访问控制规则是从上到下评估的。第一个匹配的访问控制规则获胜。在您的示例中,这意味着将永远不会考虑最后四条规则。由于
角色\临床医生
角色包括
角色\用户
角色,因此您的用户将始终被授予访问权限


您可以阅读有关如何评估访问控制规则的更多信息。

访问控制规则是从上到下评估的。第一个匹配的访问控制规则获胜。在您的示例中,这意味着将永远不会考虑最后四条规则。由于
角色\临床医生
角色包括
角色\用户
角色,因此您的用户将始终被授予访问权限

您可以阅读有关如何评估访问控制规则的更多信息