Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase Firestore如何列出授权文档?_Android_Firebase_Kotlin_Firebase Security_Google Cloud Firestore - Fatal编程技术网

Android Firebase Firestore如何列出授权文档?

Android Firebase Firestore如何列出授权文档?,android,firebase,kotlin,firebase-security,google-cloud-firestore,Android,Firebase,Kotlin,Firebase Security,Google Cloud Firestore,我正在尝试创建一个文档列表。假设我有这种结构: cards cardId1 authorizedUser = someuserid1 cardId1b authorizedUser = someuserid1 cardId2 authorizedUser = someuserid2 我想列出“someuserid1”的前两个文档,以及“someuserid2”的最后一个文档。最好的方法是什么?我尝试使用安全规则,但不起作用: service cloud.fir

我正在尝试创建一个文档列表。假设我有这种结构:

cards
  cardId1
    authorizedUser = someuserid1
  cardId1b
    authorizedUser = someuserid1
 cardId2
    authorizedUser = someuserid2
我想列出“someuserid1”的前两个文档,以及“someuserid2”的最后一个文档。最好的方法是什么?我尝试使用安全规则,但不起作用:

service cloud.firestore {
  match /databases/{database}/documents {
    match /cards/{cardid} {
      allow read, write: if resource.data.authorizedUser == request.auth.uid;
    }
  }
}
这是我的Kotlin代码:

val query = FirebaseFirestore.getInstance()
                    .collection("cards")
                    .limit(50)
val options = FirestoreRecyclerOptions.Builder<Card>()
                .setQuery(query,Card::class.java)
                .build()

adapter = CardFireAdapter(options)
val query=FirebaseFirestore.getInstance()
.收款(“卡”)
.限额(50)
val options=FirestoreRecyclerOptions.Builder()
.setQuery(查询,卡片::class.java)
.build()
适配器=CardFireAdapter(选件)

知道我在这里遗漏了什么吗?

安全规则定义了允许的查询类型

仍然必须在查询中执行实际筛选:

val query = FirebaseFirestore.getInstance()
                .collection("cards")
                .whereField("authorizedUser", isEqualTo: "someuserid1")
                .limit(50)

谢谢,它起作用了。我使用了.whereEqualTo()方法,因为现在没有.where()方法了。这在我看来确实是个错误,不同平台的语法略有不同。我更新了答案。这仍然意味着获得id令牌的用户可以通过REST api列出所有卡,即使他们没有实际访问任何卡。不,没有。安全规则确保您只能查询授权访问的数据。由于安全规则在服务器上强制执行,并且只能由Firebase项目的管理员修改,因此这是一个非常可靠的安全方案。