我想使用可以由用户创建的Firebase创建项目列表,然后他可以指定其他用户共享列表(因此他们也可以修改其内容)。我计划通过使用以下结构来执行此操作:
因此,用户部分指定用户拥有的列表。然后节点“列表”,创建的所有列表都具有唯一的ID,并且为每个列表指定其成员:
在这个例子中,Rick是列表的管理员而Tom只是一个成员。现在我希望规则只允许在'items'节点下允许读写,如果用户id存在于'members'节点下。
现在我有两个问题: 1.这种方法是正确的还是我的整个数据结构是否应该与此不同? 2.如果结构正常,我应该如何编写规则以获得上述行为,以及如何为每个列表生成唯一ID?
答案 0 :(得分:2)
true
替换“与密钥相同的值”,以节省几个字节的存储/带宽。除此之外,如果不了解所有用例,很难提供更多“硬”建议。
您可能还想考虑最近的更改:security rules can now validate queries,这意味着您可能没有/users/$uid/lists
索引。我建议你试一试,看看它是否适用于你的用例。
为了允许只对该列表的成员进行列表的读访问,这些规则可以作为一个起点:
{
"rules": {
"lists": {
"$listid": {
"items": {
".read": "
data.parent().child('members').child('admin').val() === auth.uid ||
data.parent().child('members').child(auth.uid).exists()
"
}
}
}
}
}
该.read
规则的第一行授予对管理员的读取权限。然后第二行授予所有其他用户读取权限。
最后:我一如既往地建议您阅读NoSQL data modeling并观看Firebase for SQL developers。