Firebase与其他用户共享数据

时间:2018-02-02 14:05:56

标签: android firebase-realtime-database firebase-authentication data-sharing

我想使用可以由用户创建的Firebase创建项目列表,然后他可以指定其他用户共享列表(因此他们也可以修改其内容)。我计划通过使用以下结构来执行此操作:

enter image description here

因此,用户部分指定用户拥有的列表。然后节点“列表”,创建的所有列表都具有唯一的ID,并且为每个列表指定其成员:

enter image description here

在这个例子中,Rick是列表的管理员而Tom只是一个成员。现在我希望规则只允许在'items'节点下允许读写,如果用户id存在于'members'节点下。

现在我有两个问题: 1.这种方法是正确的还是我的整个数据结构是否应该与此不同? 2.如果结构正常,我应该如何编写规则以获得上述行为,以及如何为每个列表生成唯一ID?

1 个答案:

答案 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