2016-11-08 119 views
0

这的孩子的问题在这里的副本:Querying in Firebase by child of child斯威夫特火力地堡查询由孩子

有两个答案是相同,但都没有实际工作。我只是回答答案,但我没有这样的声誉 - 所以我需要问另一个问题(stackOverflow失败 - 我可以泛滥网站的倍数,但我不能告诉别人他们的答案不起作用!?)

我正在开发一个使用组的Firebase应用程序。每个组的结构是这样

groups : { 
    "-KW5C5pS_OsWqS8_SLDy" : { 
    "key" : "-KW5C5pS_OsWqS8_SLDy", 
    "name" : "Test", 
    "users" : { 
     "uFpUrVFafVgVFsQudTNpOquIJZE2" : true 
    } 
    } 
} 

我希望能够查询具有当前用户无论是真或假,则表示如果他们有管理员权限或没有的uid组。现在我的查询看起来是这样的:

FIRDatabase.database().reference() 
     .child("groups").queryOrdered(byChild: "users/" + uid).queryEqual(toValue: writable) 

这是相同的东西被张贴作为回答其他问题,并说了个遍,它的作品 - 但它没有返回值!

这是一个错误还是我做错了什么?

回答

0

好了 - 我发现我的问题。我已经制定了一条规则,允许我只阅读我所属的组 - 但显然这对于​​当前的Firebase规则语言来说是不可能的,因为您需要能够读取整个目录才能查询它。我改变了规则,允许所有经过身份验证的用户阅读所有组,并解决了这个问题 - 尽管这不是理想的安全措施。

我花了这么长时间才弄清楚这一点,因为它没有给我一个在日志中拒绝错误的权限 - 它只是给了我一个空的查询。

+0

如果您想要处理代码中的权限被拒绝错误,您可以使用'observe'方法的'withCancelBlock'变体。无论如何,这对未来的查询来说可能是个好主意。 – vzsg

0

我认为你的查询是正确的,你忘了观察:

FIRDatabase.database().reference() 
    .child("groups").queryOrdered(byChild: "users/" + uid).queryEqual(toValue: writable).observe(FIRDataEventType.value, with: { (snapshot) in 
// Do what you need with your snapshot here 
// check if the snapshot is different from nil 
}) 
+0

我将这个传递给FUIArray - 它为我观察。我使用单个子项时没有问题,例如:query:FIRDatabase.database()。reference()。child(“groupdata”)。child(group.key).child(“items”)。queryOrdered(byChild:“父母列表“)。queryEqual(toValue:list.key) - 它只有在使用”users /“+ uid时,我有问题 –

+0

我也尝试将字符串更改为等同的”users/\(uid)“ - 相同的结果。 –

相关问题