我有一个项目和一个Symfony3 Silex 2 API,它基于使用SF3创建的数据库。 问题出现是因为数据库中的ROLE字段,实际上symfony3通过序列化,燧石或使用字符串在数据库中存储用户角色。
为什么Symfony序列化和燧石正确? 如何解决问题,因为Silex不管理角色序列化?
角色字段BDD: 硅石:
ROLE_MODO,ROLE_SUPER_ADMIN
SF:
a:2:{i:0;s:9:"ROLE_MODO";i:1;s:16:"ROLE_SUPER_ADMIN";}
谢谢。
答案 0 :(得分:4)
确保在SF3平台中,使用roles
DBAL类型而非simple_array
映射array
字段:
@ORM\Column(name="roles", type="simple_array")
区别在于array
类型存储了序列化的值,simple_array
使用逗号分隔来存储它们的值。
答案 1 :(得分:1)
<强> Symfony的强>
我认为ROLE
字段在doctrine orm中被映射为array
,因此序列化/反序列化是由doctrine 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']);
}
...
}