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

时间:2013-05-20 13:26:44

标签: php symfony doctrine-orm fosuserbundle

我需要能够在分页表中显示所有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()可能不是最后去的地方。 D'哦!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

该表示法是PHP数组的序列化 - 这意味着FOSUserBundle不会规范用户角色关系。

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

一个肮脏的黑客攻击是在角色字段上发出LIKE搜索,因为角色名称仍然可读,但这样做会有点糟糕。

您可以在this repository issue找到更多信息。