如果要在节点中保存相同类型的多个子节点,则childByAutoId将非常有用,这样每个子节点都将有自己的唯一标识符。
List:{
KJHBJJHB:{
name:List-1,
owner:John Doe,
user_id:<Fire base generated User_id>
},
KhBHJBJjJ:{
name:List-2,
owner:Jane Lannister,
user_id:<Fire base generated User_id>
},
KhBHJZJjZ:{
name:List-3,
owner:John Doe,
user_id:<Fire base generated User_id>
}
}我试图在以下代码的帮助下访问List:
let ref = FIRDatabase.database().reference(withPath: "/List")当前登录应用程序的用户是John Doe。当用户访问列表时,我希望所有所有者为John Doe的List子(即List-1 & List-3)忽略其他子值。
我是否必须在我的应用程序中这样做,还是可以通过Firebase安全规则来实现?
我目前的规则定义是:
"List":{
".read": "root.child('List/'+root.child('List').val()+'/user_id').val() === auth.uid" }但这条规则并没有给我任何成功。知道怎样才能达到预期的效果吗?
发布于 2016-12-14 15:46:40
您正在尝试使用安全规则来筛选列表。这是不可能的,对于从SQL背景进入Firebase的开发人员来说,这是常见的缺陷之一。我们通常将其称为“规则不是过滤器”,您可以在以下网站了解更多有关它的信息:
解决方案几乎总是一样的:保留每个用户都可以访问的帖子键的单独列表。
UserLists:{
JohnUid: {
KJHBJJHB: true,
KhBHJZJjZ: true
},
JaneUid: {
KhBHJBJjJ: true
}
}这种类型的列表通常被称为索引,因为它包含对实际post的引用。您还可以在关于数据结构的Firebase文档中找到有关此结构的更多信息。
https://stackoverflow.com/questions/41137284
复制相似问题