Firestore - 授予对子集合的访问权限也会授予对父集合的访问权限吗?

Firestore - Giving access to subcollection will also give access to the parent collection?

我正在开发一个使用 firebase 的项目,每个用户都有一本书。每本书都有很多章节。我希望每个用户都能够与任意数量的其他用户共享任何章节。我当前的层次结构是 /books/{id}/chapter/{id}

我的问题是,如果我将 /books/{id}/chapter/{id} 的访问权限授予另一个用户,他是否也可以访问 books/{id}

所以我需要编写一个 firebase 规则,允许访问子项但阻止访问父项。这是默认行为还是我需要做任何其他事情?

没有。您必须将安全规则设置为仅允许用户阅读子集合,如下所示:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /books/{bookId} {
      allow read: if false; // Rules for who can read books
      match /chapters/{chapterId} {
        allow read: if true; // Rules for who can read chapters
      }
    }
  }
}

allow read: if true;仅适用于此处的章节子集。

TL;DR: 没有。

访问权限只有在使用recursive wildcard rule时才会被子集合继承,不能向上“继承”。如果您想授予用户访问母书的权限,则必须授予他们对该集合的权限。

My question is if I give access to another user to /books/{id}/chapter/{id} will he also have access to books/{id}?

不,那不会发生。

如果没有明确允许访问任何文档的规则,那么任何人都无法访问它。匹配嵌套文档的规则不匹配父文档。

如果您想测试您的规则是否按您预期的方式工作,您应该编写代码以查看在实践中是否确实发生了这种情况。这是确保您的规则按照您期望的方式运作的最佳方式(而且您不必在互联网上听取陌生人的建议)。有一个测试库和模拟器。请阅读文档以了解其工作原理。

https://firebase.google.com/docs/firestore/security/test-rules-emulator

您还可以使用 Firestore 控制台来测试您的规则是否按预期工作。