【发布时间】:2016-07-16 23:18:58
【问题描述】:
假设如下。
posts : {
"$postid":{
"meta":{
"state":true,
"text" :"I should be read",
},
"likes":{
"uid1":true,
"uid2":true,
},
},
"$postid":{
"meta":{
"state":false,
"text" :"I should be read",
},
"likes":{
"uid1":true,
"uid2":true,
"uid3":true,
},
}
}
我想查询父节点('posts')如下。
- 省略 state = false 的帖子
- 优先考虑获得最多赞的帖子
安全规则
- 拒绝阅读 state == false 的帖子。
这是我如何查询数据的 Javascript 版本。 ////$.fdr === firebase.database.ref();
$.fdr("posts").orderByChild("time").limitToLast(20).once('value',function(r) {
var r = r.val();
if(r !== null){
///use r;
}
},function(e){
console.log(e);
});
为什么这样:我希望用户删除帖子,并且以后能够撤消删除。 要删除,我将“post.meta.state”的值更改为“false”。 虽然“post.meta.state”为假,但安全规则不应允许读取该帖子。
问题:如果我在帖子节点而不是父节点(“posts”)中设置规则,
"postid": {
".read":"data.child('state').val() == true"
}
然后我可以限制“.read”,但前提是我会按如下方式查询帖子:
firebase.database.ref("posts/postid");
否则,如果我尝试从父节点查询:
firebase.database.ref("posts/"),
这样我就可以过滤掉我不想返回的帖子,然后我必须将规则从“帖子”子级提升到“帖子”(父级),这将导致子级中的规则被忽略,而且我似乎无法找到一种方法来拒绝返回带有“状态”== false 的帖子;
以上是我目前的理解,请纠正我迷路的地方。
【问题讨论】:
-
你无疑已经尝试了一些东西。请分享您尝试过的内容以及显示您遇到问题的最少代码。至少这会告诉我们您的目标平台是什么。但它更有可能让我们更好地了解如何为您提供帮助。
-
@FrankvanPuffelen 请查看新的编辑。
标签: firebase firebase-realtime-database firebase-authentication firebase-security