Firestore 数据库规则:查询权限
Firestore Database Rules: Permissions for Queries
我正在尝试根据字段查询文档。
由于这个字段,我确实有权阅读此文档:
match /lists/{list=**} {
allow read: if resource.data.name == 'MyDocument'
}
如果我尝试直接检索此文档,它会成功(Android 使用 Kotlin 的客户端):
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
?
So my question is: Does the user need read access on all documents which are searched in the query?
是的。
为了避免在查询列表时出错,在客户端可以使用where子句只读取您有权限读取的文档。
我正在尝试根据字段查询文档。
由于这个字段,我确实有权阅读此文档:
match /lists/{list=**} {
allow read: if resource.data.name == 'MyDocument'
}
如果我尝试直接检索此文档,它会成功(Android 使用 Kotlin 的客户端):
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
?
So my question is: Does the user need read access on all documents which are searched in the query?
是的。
为了避免在查询列表时出错,在客户端可以使用where子句只读取您有权限读取的文档。