Symfony2访问控制给我403错误

时间:2017-07-18 17:23:41

标签: symfony

我知道我的标题不是很清楚。我解释一下,我创建了一个安全性:

security:
encoders:
   Bundles\UserBundle\Entity\user: sha512

role_hierarchy:
    ROLE_MENAGE:        [ROLE_USER]
    ROLE_EMPLOYE:       [ROLE_ADMIN]
    ROLE_GERANT:        [ROLE_SUPER_ADMIN]
    ROLE_INTERCOMMUNAL: [ROLE_GERANT]

providers:
    main:
        id: fos_user.user_provider.username

firewalls:
    main:
        pattern:        ^/
        anonymous:      true
        provider:       main
        form_login:
            login_path: fos_user_security_login
            check_path: fos_user_security_check
        logout:
            path:       fos_user_security_logout
            target:     /login
        remember_me:
            key:        %secret%
access_control:
    - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, roles: ROLE_MENAGE }
    - { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_MENAGE }
    - { path: ^/EncoderDechet, roles: ROLE_EMPLOYE }
    - { path: ^/VoirConteneurs, roles: ROLE_GERANT }
    - { path: ^/GenererFacture, roles: ROLE_INTERCOMMUNAL }
    - { path: ^/Statistique, roles: ROLE_GERANT }

就像你在SECURITY.YML中看到的那样,我定义了一个角色层次结构。当我使用具有:ROLE_EMPLOYE作为角色的用户登录时,我可以访问/注册。但是这条路径必须具有角色:EMPLOYE,它给我一个403:访问被拒绝。

你能解释一下我犯了哪个错误吗?

1 个答案:

答案 0 :(得分:1)

您的角色层次结构看起来不对。

应该是

ROLE_B: ROLE_A
ROLE_C: ROLE_B
ROLE_D: ROLE_C

类似

ROLE_MENAGE:        ROLE_USER
ROLE_EMPLOYE:       ROLE_MENAGE
ROLE_GERANT:        ROLE_EMPLOYE
ROLE_INTERCOMMUNAL: ROLE_GERANT

哪个会给你5个角色:USER< MENAGE<员工< GERANT<社区间

如果确实需要ROLE_ADMIN& ROLE_SUPER_ADMIN只需将它们添加到您需要的地方。

这是我在当前项目中使用的例子

ROLE_INFLUENCER:    ROLE_USER
ROLE_COMPANY:       ROLE_INFLUENCER
ROLE_COMPANY_ADMIN: ROLE_COMPANY
ROLE_SITE_ADMIN:    ROLE_COMPANY_ADMIN
ROLE_SUPER_ADMIN:   ROLE_SITE_ADMIN