gpt4 book ai didi

firebase - Firestore查询中的文档ID错误

转载 作者:行者123 更新时间:2023-12-03 04:46:32 25 4
gpt4 key购买 nike

我已经注意到对Firestore数据库执行查询时的这种奇怪行为。
基本上,我试图读取一个文档,该文档的特定documentid与当前登录用户的uid相匹配。
当我执行查询时,我得到PERMISSION DENIED,并且该文档的路径与该集合中的任何文档都不匹配。

这是执行的查询

Firestore _firestore = Firestore.instance;

并在 StreamBuilder
_firestore.collection('roleusers').document(uid).snapshots()

现在这是错误
W/Firestore( 8177): (21.3.0) [Firestore]: Listen for Query(roleusers/B70tIEbiEkXobNLZ049j) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}

这些是 roleusers集合内的文档。
roleusers collection

如您所见,图片中没有任何文档与错误所指向的documentid相匹配。

编辑:这些是我的Firestore规则:
  match /roleusers/{roleusersID} {
allow read: if isAdmin(request) || request.auth.uid == roleusersID;
allow write: if isAdmin(request) || request.auth.uid == roleusersID;
allow create: if isSignedIn();

match /roleusers/{roleusersId}/orders/{orderID} {
allow read: if isAdmin(request) || request.auth.uid == roleusersID;
allow write: if isAdmin(request) || request.auth.uid == roleusersID;
}

}

match /{path=**}/orders/{orderID} {
allow read: if isAdmin(request) || isOwner();
allow update: if isAdmin(request)
allow create: if isOwner();
}

其中 isOwner是此函数
function isOwner(){
return get(/databases/$(database)/documents/roleusers/$(request.auth.uid)).data.id ==
request.auth.uid
}

EDIT2:进一步解释为什么我要编写这样的规则:我的主要目标是允许用户仅读取自己的文档,而只能写入自己的文档。管理员可以对任何用户文档执行任何操作。任何经过身份验证的用户都可以使用 roleusers创建文档,因为当新用户打开应用程序时,它将在数据库上写入信息。

嵌套规则的目的是允许用户从 orders中的文档内的子集合 roleusers中读取

使用递归通配符的最后一条规则需要执行 collectionGroup查询,以从所有用户获取所有订单。

我怀疑 isOwner()函数是否确实有效

EDIT3:这是 isAdimn()函数
function isAdmin(request) {
return request.auth.uid == "F7Ech2v4GpgFfSYpA1HRASYpQTD3"
|| request.auth.uid == "103162704257974620268"
}

最佳答案

这是因为Firebase安全规则。请阅读此Firebase官方文档。它说明了如何解决此问题。
https://firebase.google.com/docs/firestore/security/get-started

关于firebase - Firestore查询中的文档ID错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62180572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com