Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Firebase firestore查询中的文档id错误_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase firestore查询中的文档id错误

Firebase firestore查询中的文档id错误,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我在对firestore数据库执行查询时注意到了这种奇怪的行为。 基本上,我尝试读取一个文档,该文档具有与当前登录用户的uid匹配的特定documentid。 执行查询时,权限被拒绝,文档路径与该集合中的任何文档都不匹配 这是执行的查询 Firestore _firestore = Firestore.instance; 在一个StreamBuilder里 这就是错误所在 W/Firestore( 8177): (21.3.0) [Firestore]: Listen for Query(ro

我在对firestore数据库执行查询时注意到了这种奇怪的行为。 基本上,我尝试读取一个文档,该文档具有与当前登录用户的uid匹配的特定documentid。 执行查询时,权限被拒绝,文档路径与该集合中的任何文档都不匹配

这是执行的查询

Firestore _firestore = Firestore.instance;
在一个StreamBuilder里

这就是错误所在

W/Firestore( 8177): (21.3.0) [Firestore]: Listen for Query(roleusers/B70tIEbiEkXobNLZ049j) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
这些是Roleuser系列中的文件。

正如您所看到的,图片中没有一个文档与错误所指向的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();
    }
此函数在哪里

function isOwner(){
        return get(/databases/$(database)/documents/roleusers/$(request.auth.uid)).data.id == 
        request.auth.uid
    }
EDIT2:进一步解释我为什么这样写规则:我的主要目标是允许用户只读取自己的文档,只写入自己的文档。管理员可以对任何用户文档执行任何操作。任何经过身份验证的用户都可以在roleusers中创建文档,因为当新用户打开应用程序时,它会将信息写入数据库

嵌套规则的目的是允许用户在roleusers中读取其文档中的子集合命令

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

我有点怀疑isOwner函数是否真的起作用了

编辑3:这是isAdimn函数


这是因为firebase安全规则。请阅读Firebase官方文件。它解释了如何解决这个问题。

被拒绝的权限与文档的存在或不存在无关。这与安全规则有关。请编辑此问题以显示您对Firestore激活的安全规则。我看不到iAdmin。请编辑以显示完整的规则集,并帮助理解您的查询如何匹配规则。
function isOwner(){
        return get(/databases/$(database)/documents/roleusers/$(request.auth.uid)).data.id == 
        request.auth.uid
    }
function isAdmin(request) {
  return request.auth.uid == "F7Ech2v4GpgFfSYpA1HRASYpQTD3"
  || request.auth.uid == "103162704257974620268"
}