我试图运行一个查询,从User表中检索一组特定的用户,并使用Parse JS SDK将它们呈现给给定的登录用户。 起初我运行的查询如下:
(new Parse.Query(Parse.Object.extends("_User"))).containedIn("objectId", [/* list of user ids */]).find(/* success & error blocks */);
然后我学到了更正确的方法:
(new Parse.Query(Parse.User)).containedIn("objectId", [/* list of user ids */]).find(/* success & error blocks */);
但即便如此,我还是会找回一个空列表。我仔细检查了数据库,并确保我传递的ID在那里,他们是。只是为了它的地狱,我试过了:
(new Parse.Query(Parse.User)).find(/* success & error blocks */);
我找回了当前用户对应的用户对象。所以我的用户查询似乎只能访问当前用户。我还注意到,当我尝试从Parse API控制台运行等效查询时,我得到了相同的结果!这是某种全球性的设置,还是我做错了什么?谢谢!
答案 0 :(得分:2)
我认为由于Parse中的用户安全设置,您必须使用CloudCode。尝试将其转换为云代码功能并包含
Parse.Cloud.useMasterKey()
在云代码功能之前。这是一项安全功能' Parse以确保人们无法编辑和访问其他用户配置文件和信息。
请参阅解析安全网站:
https://parse.com/docs/js/guide#security-object-level-access-control
以及有关实现useMasterKey()及其持久性的使用和注意事项的更多信息。
https://parse.com/docs/js/guide#security-implementing-business-logic-in-cloud-code
答案 1 :(得分:1)
为了节省线路,我建议不要将所有这些呼叫压缩到一行。它牺牲了可读性。虽然,技术上没有错,但是文档甚至说调用会返回一个查询,这样你就可以对每个调用进行链接调用。
但是,我认为你的电话没有任何问题。你是如何访问检索到的对象的?你传入containsIn的objectIds列表是什么?我想我们需要更多的代码。编辑 - 我会说我80%肯定,没有更多信息,这是一个ACL / CLP问题。转到仪表板,点击_User类,按安全性,然后查看读/写设置。
答案 2 :(得分:0)
看起来像是CLP问题。也许禁用了您的User类的查找权限。转到您的用户类,点击安全性,切换到提前,然后检查是否勾选了查找权限。