2017-07-18 128 views
1

我知道我的标题不是很清楚。我解释一下,我创建了一个安全性:Symfony2访问控制给我403错误

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

我很抱歉它是403 –

回答

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只是广告d他们在那里你需要他们。

下面是我对我目前的项目中使用,例如

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 
+0

ROLE_MENAGE:[ROLE_USER] ROLE_EMPLOYE:[ROLE_MENAGE] ROLE_GERANT:[ROLE_EMPLOYE] ROLE_INTERCOMMUNAL: ROLE_GERANT]像这样? –

+0

您不需要[]字符,否则看起来没问题 –