Firestore数据库规则:查询的权限

我试图查询基于字段的文档。

由于这个领域,我有权限阅读这个文件:

match /lists/{list=**} { allow read: if resource.data.name == 'MyDocument' } 

如果我试图直接检索这个文档,它是成功的(使用Kotlin的Android客户端):

 val doc = db.document("lists/acaa0247-eccd-4ff0-b986-7f8b6187e45f") doc.get().addOnCompleteListener { task -> if (task.isSuccessful) { // here it works println("This Works") } else { println("Failed") } } 

但是当我查询它(或只是试图获取集合中的所有文档),我得到一个权限被拒绝的异常:

 val collection = db.collection("lists") collection.get().addOnCompleteListener(activity, { task -> if (task.isSuccessful) { println("Should work") } else { // Here is isn't working println("Failed") } }) 

当我允许每个人阅读/lists下的所有文件时,这个查询是有效的。

 match /lists/{list=**} { allow read: if request.auth != null } 

所以我的问题是:用户是否需要阅读所有在查询中搜索的文档? 在我的情况下,这将意味着所有在/lists所有字段的文件?

所以我的问题是:用户是否需要阅读所有在查询中搜索的文档?

是。

为了避免在查询列表时出现错误,在客户端上,您可以使用where子句只读取您有权读取的文档。