如何访问其他用户的数据?

How to access data of other user?

我正在开发一个使用 FOSUserBundle 的 Symfony 2.7 webapp。到目前为止一切正常。不,我想添加一个管理后端,允许显示不同用户的详细信息。

例如,在 Phone 图书应用中,应该能够看到所选用户创建了多少联系人:

$contact_count = $this->contactsCountForUser(5);
...

public function contactsCountForUser($user_id) {
    $repo = $this->em->getRepository('AppBundle:Contact');

    $qb = $repo->createQueryBuilder('c');
    $qb->select('COUNT(c)');
    $qb->where('c.user = :userId');
    $qb->setParameter('userId', $user_id);           

    $sql = $qb->getQuery()->getSql();
    $count = $qb->getQuery()->getSingleScalarResult();

    return $count;
}

这失败了,因为以下是作为 SQL 查询创建的:

SELECT COUNT(c0_.guid) AS sclr0 FROM contact c0_ WHERE (c0_.user_id = ?) AND (c0_.user_id = '1')

问题 1: 为什么 $qb->where('c.user = :userId') 被翻译成 c0_.user_id = ??为什么 5 beeing 不用作 user_id?

问题二: AND (c0_.user_id = '1') 会自动添加到查询中。我假设这是由 FOSUserBundle 完成的,它将查询限制为当前用户。这里的ID 1是当前登录用户的ID,也就是Admin...显然(c0_.user_id = ?) AND (c0_.user_id = '1')永远不可能是真的

那么:我如何说服 Doctrine and/or FOSUserBundle,管理员应该能够对其他用户数据执行查询?

感谢@LBA的评论,让我找到了问题的根源:

一段第三方代码添加一个SQLFilter作为UserAware注解。 This webpage 详细描述了做了什么以及它是如何工作的。

也许这可以帮助其他人避免这种 "problem" 并弄清楚什么是 "wrong" :-)

关于问题1:即使解决了问题2,问题1还是一样。 userId 在查询中仍被转换为 ?。然而,这似乎并不影响代码的功能。据我所知,一切都按预期进行。