Firebase 与其他用户共享数据

Firebase sharing data with other users

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

所以用户部分指定了用户拥有的列表。然后是节点 'lists',所有创建的列表都有一个唯一的 id,每个列表的成员都被指定:

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

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

乍一看,这似乎是一个合理的起点。我只是将 "values that are the same as the key" 替换为简单的 true,以节省 storage/bandwidth 的几个字节。除此之外,在不了解所有用例的情况下很难提供更多 "hard" 建议。

您可能还想考虑最近的更改: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 and watching Firebase for SQL developers