Firestore数据库规则:查询权限

时间:2017-10-10 09:02:16

标签: firebase firebase-security google-cloud-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中所有字段的所有文档?

1 个答案:

答案 0 :(得分:3)

  

所以我的问题是:用户是否需要对查询中搜索的所有文档进行读访问?

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