如何访问其他用户的数据?
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 在查询中仍被转换为 ?
。然而,这似乎并不影响代码的功能。据我所知,一切都按预期进行。
我正在开发一个使用 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 在查询中仍被转换为 ?
。然而,这似乎并不影响代码的功能。据我所知,一切都按预期进行。