Doctrine和FOSUserBundle——根据用户的角色显示用户


Doctrine and FOSUserBundle - displaying users according to their roles

我需要能够在分页表中显示所有ROLE_ADMIN和ROLE_SUPER_ADMIN用户。我使用Doctrine的findBy()方法正确地显示每个人,但是我对如何按角色过滤有点困惑。角色保存为DC2Type:array,角色数据本身看起来有点像JSON:

a:1:{i:0;s:9:"ROLE_USER";}

有了这个,我很好奇要传递什么到findBy()来选择所有ROLE_ADMIN和ROLE_SUPER_ADMIN用户。

换句话说:

$users = $em->getRepository('Acme'SiteBundle'Entity'User')->findBy(array(/* what do I put here? */), array('id' => 'asc'), $perPage, $perPage * ($page - 1));

编辑:嗯……看起来findBy()可能不是这里要走的路。分析!

我认为将组中的每个角色耦合起来并与组一起工作将会更好。特别分配和拒绝角色组变得更容易,因为它是一个简单的关系。

该符号是PHP数组的序列化-这意味着FOSUserBundle没有规范化用户-角色关系。

但是你可以提供你自己的用户类并重载角色getter/setter,或者如果你不需要处理那么多用户,你可以重载用户存储库,获取所有用户并按角色过滤。

一个肮脏的hack是在roles字段上发出LIKE搜索,因为角色名仍然是可读的,但这将是一种糟糕的性能方面。