2015-11-18 37 views
-1

我正在使用FosUserBundle,在我的Symfony2項目中,我想知道如何將角色更改爲文本而不是數組(我的意思是我擁有角色作爲varchar而不是我的數據庫中的表),這可能嗎?我如何將角色類型更改爲FOS中的varchar

在抽象類用戶我已經改變類型爲字符串。

/** 
* @var string 
*/ 
protected $roles; 

這裏是我的security.yml

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

role_hierarchy: 
    ROlE_Client:  ROLE_Client 
    ROlE_Agent:  ROLE_Agent 
    ROLE_SUPER_ADMIN: ROLE_SUPER_ADMIN 

providers: 
    fos_userbundle: 
     id: fos_user.user_provider.username 

firewalls: 
    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
      #always_use_default_target_path: false 
      #default_target_path:   /affichage 
     logout:  true 
     anonymous: true 

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/, role: ROLE_ADMIN } 
    - { path: ^/affichage, role: ROLE_Agent } 
+0

只是不這樣做!首先它不是通過更改文檔註釋,而是改變實體中的類型。你會打破symfony的所有安全方法 –

+0

只要你從'getRoles()'返回一個數組,你就沒有必要破壞安全性,否則你會好('return array($ this-> roles); '會很容易)。爲什麼你想改變字段類型?你背後有什麼想法? – qooplmao

+0

我有兩種類型的角色(代理和客戶端),如果我註冊一個用戶作爲代理,我將[ROLE_AGENT,ROLE_USER],否則,當我使用access_control時: - {path:^/affichage,role:ROLE_Agent}它不能正常工作..它給我的訪問被拒絕 – Marooweb

回答

0

您已經role_hierarchy,這樣會改變:

role_hierarchy: 
    ROLE_CLIENT:  ROLE_USER 
    ROLE_AGENT:  ROLE_USER 
    ROLE_SUPER_ADMIN: ROLE_ADMIN 

使用帽尊重正常化。

要解釋爲什麼它是這樣的: 關鍵是角色的名稱和值是什麼繼承

例如:

ROLE_AGENT: ROLE_USER #An agent has agent's rights + user's rights 
相關問題