2016-10-11 19 views
2

我有一個項目和基於SF3創建的數據庫的Symfony3 Silex 2 API。 由於數據庫中的ROLE字段出現問題,實際上symfony3通過serialize,flint或使用字符串在數據庫中存儲用戶角色。不要使用序列化的用戶角色Symfony

爲什麼Symfony的序列化和燧石是正確的? 如何解決問題,因爲Silex不管理角色序列化?

角色領域BDD: 的Silex:

ROLE_MODO,ROLE_SUPER_ADMIN 

SF:

a:2:{i:0;s:9:"ROLE_MODO";i:1;s:16:"ROLE_SUPER_ADMIN";} 

謝謝。

+0

你使用ORM的學說在硅石和symfony的? –

+0

我對我的項目SF使用原則,但不能與API Silex一起使用。 Juste與silex:http://silex.sensiolabs.org/doc/master/providers/doctrine.html – Corgato

+0

是否使用FOSUserBundle的Symfony3後端? – martin

回答

1

Symfony的
我認爲ROLE字段映射爲教義ORM array,所以序列化/反序列化由學說ORM自動進行。
http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#array

Silex的
您應該手動反序列化的角色。我不知道你如何讓用戶在硅石..

class User implements Symfony\Component\Security\Core\User\AdvancedUserInterface 
{ 
    ... 
    public function getRoles() 
    { 
     return unserialize($this['roles']); 
    } 
    ... 
} 
+0

此解決方案不起作用,因爲如果該方法沒有序列化,並且在Silex下它是相同的,如果不是單個陣列不起作用,則該方法是在symfony下的Granted工廠。 我認爲我們需要重載Flint中的isGranted方法反序列化處理之前的方法嗎?你什麼時候覺得? – Corgato

+0

反序列化getRoles函數中的角色以便返回角色數組,而不是序列化字符串 –

+0

您能解釋如何重寫這個類嗎? 對於getRoles方法在我的項目Silex中進行反序列化? 謝謝! – Corgato

4

確保在SF3平臺,爲rolessimple_array DBAL類型,而不是array地圖:

@ORM\Column(name="roles", type="simple_array") 

不同的是, array類型存儲其值序列化和simple_array通過使用逗號分隔存儲其值。

0

那就是說?我不直接整合類「User」是一個Symfony組件直接!

但我不知道如何使火石恢復更改類,而不是說的symfony的,它低於:

Symfony \ Component \ Security \ Core \ User; 
final class User implements AdvancedUserInterface 
{ 
    /** 
     * {} @inheritDoc 
     */
    getRoles public function() 
    { 
     return unserialize ($ this-> Actual [0]); // work 
     return $ this-> roles; // Not work 
    } 
} 
相關問題