2016-10-11 21 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 
    } 
} 
相关问题