使用 firebase 的嵌套子文档的安全规则

Security rules for nested subdocuments with firebase

我正在尝试使用 firebase 创建一个允许用户创建文档的文本编辑器应用程序,但他们也可以在现有文档中嵌套一个新文档(编辑文档时,他们可以点击一个按钮这将在数​​据库中添加一个新文档并在重定向到此页面的编辑器中插入一个 link:

用户可以与其他用户共享文档,但他们也应该可以访问所有嵌套的文档。所以现在我想知道如何编写安全规则来做到这一点。

我认为构造 实时数据库 的最佳方法是将所有文档存储在根目录下,然后添加 parentDocumentpath 属性 到每个文档:

{
  "documents": {
    "doc-1": {
      "title":"Lorem ipsum",
      "content": "...",
      "path":"/",
      "owner":"user-1",
      "canAccess":{
        "user-3":true
      }
    },
    "doc-2": {
      "title":"Dolor sit",
      "content": "...",
      "path":"/doc-1/",
      "owner": "user-1"
      "canAccess": {
        "user-2":true
      }
    }
  },
  "users": {
    "user-1": { ... },
    "user-2": { ... },
    "user-3": { ... }
  }
}

↑ 在下面的例子中,

但现在我不知道如何管理安全规则,因为要检查用户是否有权访问特定文档,我想它需要通过其每个父项(使用其 pathparentDocument 道具)。也许我也可以在 each 文档上指定 canAccess 属性,但是每当父级的 canAccess 属性更新时,我就必须更新每个嵌套文档......

如有任何帮助,我们将不胜感激

在 Firebase 实时数据库模型中 permission automatically cascades 向下。这意味着一旦您授予用户(读或写)特定路径的权限,他们也可以访问该路径下的所有数据。您再也无法撤销较低级别的权限。

所以您的要求实际上与此模型非常匹配,我建议您尝试实施它并在您 运行 遇到问题时报告。