2017-07-18 131 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

您不需要[]字符,否則看起來沒問題 –