我知道我的标题不是很清楚。我解释一下,我创建了一个安全性:
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:访问被拒绝。
你能解释一下我犯了哪个错误吗?
答案 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