当前位置: 首页 > 知识库问答 >
问题:

Firestore规则:在集合和所有子集合中制作文档遵循相同的规则

东郭宏朗
2023-03-14
users
  user1
  user2
  user3
group
  group1
  group2
  group3
     subcollections1
        subdoc11
        subdoc12
     subcollections2
        subdoc21
        subdoc22

所以我现在的规则是这样的。

match /groups/{document=**} {
  allow read, write: if resource.data.users[request.auth.uid] != null;
}

我的问题是,即使在写到子集合时,它是否会准确地检查用户是否在group1->doc->subcollection->doc-'members'中,或者在这种情况下,它是否会签入group1->doc->subcollection->doc-'members'?

因为members列表只在groups集合中,而不在子集合中,所以不希望出现第二种情况。

共有1个答案

傅阳炎
2023-03-14

虽然我实际上没有尝试过,resource.data变量是对正在访问的文档的引用。因此,如果路径访问文档/groups/group3/subcollections1/subdoc11,则该文档将由resource.data引用。因此,我认为你的规则不会像预期的那样有效。

关于如何实现所需的行为,请注意,最好在最细的级别定义Firestore规则。这将防止在应该应用更严格的规则而应用更广泛的规则时意外地授予访问权限。我想提出类似的建议:

match /groups/{groupId} {
  allow read, write: if resource.data.users[request.auth.uid] != null;
}

match /groups/{groupId}/{subcollection}/{documentId} {
  allow read, write: if get(/databases/$(database)/documents/$(groupId)).data.users[request.auth.uid] != null
}

有关进一步的参考资料,请查看以下有关规则如何工作和示例规则的页面。

 类似资料:
  • 我正在开发一款iOS应用程序,它有(哇,惊喜!)聊天功能。整个应用程序大量使用Firebase工具,对于数据库,我正在使用新的云Firestore解决方案。 目前我正在使用数据库规则加强安全性,但我对自己的数据模型有点挣扎:)这可能意味着我的数据模型选择不当,但我真的很满意,除了实现规则部分。 模型的对话部分如下所示。在我的数据库的根目录下,我有一个集合: 然后我对每个对话都有一个子集合,称为消息

  • 假设我有这种结构 其中和是集合,和是文档 有没有一种方法可以通过一个查询获得根文档中包含的所有内容<如果我这样问 我只得到字段。我想要的是B的所有文件 我基本上希望我的查询返回 是否可能或者我真的需要对每个集合进行多个查询:/? 假设我有一个代表用户配置文件的非常深的嵌套集合树,我的成本会像地狱一样上升,因为每次我加载用户配置文件时,我都有一个读取请求的乘数其中N是我的树的深度: /.

  • 在云火烧-最佳实践留档第一行写道: 每秒钟更新一个文档的次数不应超过一次。如果您更新文档的速度过快,那么您的应用程序将遇到争用,包括更高的延迟、超时和其他错误。 我有一个这样的数据库结构: 我的应用程序管理一个储物柜清单,人们可以登记入住 我的希望是,由于储物柜文件在一个子集合中,我可以同时读/写多个储物柜。我担心它们被视为一个文档(存储文档)的一部分,我一次只能读/写一个储物柜。

  • 我正在使用Firebase Firestore作为BaaS构建一个应用程序。 但当我尝试在我的应用程序上创建提要/实现全文搜索时,我面临一个问题。 我希望能够搜索所有用户的帖子,问题是,用户帖子在Firestore数据库中的结构如下: 帖子(收藏)- 我想遍历每个用户的用户帖子子集合并获取提要的所有数据,并使用Algolia或ES等全文搜索应用程序来实现它。 > 我可以遍历特定的用户ID(代码如下

  • 据我所知,我可以使用云函数以某种方式实现这一点?我试着阅读云函数,但我很迷路。是否有一种方法可以触发云函数,在用户更新帖子时删除子集合中的所有文档?

  • 假设我有一个集合,其中包含子集合。餐厅权限设置在餐厅文档中,如下所示: 餐馆 任何有权访问餐厅的人也可以访问它的任何子集合,包括子集合。这是安全规则: 安全规则 查询餐厅列表可以这样完成,而且效果很好: 查询餐厅 现在如何查询子集合?我知道Firestore需要根据查询推断权限,而不查看底层数据。从逻辑上讲,这应该是可能的,因为任何可以访问的人也可以访问子集合。但是我如何组合这个子集合查询,以便F