【问题标题】:Disable querying collection in Firebase Cloud Firestore with rules使用规则禁用 Firebase Cloud Firestore 中的查询集合
【发布时间】:2018-07-17 11:28:45
【问题描述】:

我正在使用 Firebase Cloud Firestore,我想修改我的规则以限制用户查询集合。

这是不允许的:

firestore().collection("users").get()

但这应该是允许的:

firestore().collection("users").doc("someUserId").get()

目前,我的规则如下所示:

match /users/{userId} {
    allow read;
}

但是这个规则允许查询“users”集合。

如何允许单个文档获取,但不允许集合查询?

【问题讨论】:

  • 我认为您不能编写仅适用于集合的规则。如果您查看Firestore Security Rules Docs,您会注意到所有安全规则都应用于文档及其子集合。没有规则指定访问集合的条件。
  • 是的,这就是我在阅读文档时的想法,但我想看看是否有人知道方法......
  • 是的,从文档中看很不清楚 - list 规则适用于集合。

标签: javascript firebase google-cloud-firestore firebase-security


【解决方案1】:

您可以将阅读规则分为 getlist。 get 规则适用于单个文档的请求,list 规则适用于查询和集合请求 (docs)。

match /users/{userId} {

  //signed in users can get individual documents
  allow get: if request.auth.uid != null;

  //no one can query the collection
  allow list: if false;
}

【讨论】:

【解决方案2】:

试试下面的。我无法测试它,如果我输入错误,请道歉。

match /users/{userId} {
    allow read: if $(request.auth.uid) == $(userId);
}

【讨论】:

  • 我不明白这如何区分阅读集合和文档。
  • 用户将只能访问 ID 等于其auth.uid 的文档。如果他们尝试 .get() 集合中的所有文档,它将不会返回任何内容。
猜你喜欢
  • 2019-12-15
  • 2018-07-14
  • 2020-12-18
  • 2021-05-06
  • 2018-03-18
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多