使用规则禁用 Firebase Cloud Firestore 中的查询集合
Posted
技术标签:
【中文标题】使用规则禁用 Firebase Cloud Firestore 中的查询集合【英文标题】:Disable querying collection in Firebase Cloud Firestore with rules 【发布时间】: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
规则适用于集合。
【参考方案1】:
您可以将阅读规则分为 get 和 list。 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;
【讨论】:
文档中的另一个示例:firebase.google.com/docs/firestore/security/…【参考方案2】:试试下面的。我无法测试它,如果我输入错误,请道歉。
match /users/userId
allow read: if $(request.auth.uid) == $(userId);
【讨论】:
我不明白这如何区分阅读集合和文档。 用户将只能访问 ID 等于其auth.uid
的文档。如果他们尝试 .get()
集合中的所有文档,它将不会返回任何内容。以上是关于使用规则禁用 Firebase Cloud Firestore 中的查询集合的主要内容,如果未能解决你的问题,请参考以下文章