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规则中的Access数据库引用_Firebase_Google Cloud Firestore_Firebase Security - Fatal编程技术网

Firebase firestore规则中的Access数据库引用

Firebase firestore规则中的Access数据库引用,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我正在努力访问firestore规则中的文档引用。我的数据库看起来像这样。(为简洁起见简化): 我试过很多方法,但似乎都解决不了 提前谢谢 编辑 在下面添加了收藏的截图 将角色显示为角色集合中角色文档的文档引用的用户集合。 角色集合 我可以在您的规则中看到两个问题: get需要完整的文档路径,因此您的函数getUserRole无法工作。请尝试以下方法: function getUserRole() { let role = getUser().data.role; return get

我正在努力访问firestore规则中的文档引用。我的数据库看起来像这样。(为简洁起见简化):

我试过很多方法,但似乎都解决不了

提前谢谢

编辑

在下面添加了收藏的截图

将角色显示为角色集合中角色文档的文档引用的用户集合。

角色集合

我可以在您的规则中看到两个问题:

  • get
    需要完整的文档路径,因此您的函数
    getUserRole
    无法工作。请尝试以下方法:

    function getUserRole() {
      let role = getUser().data.role;
      return get(path("/databases/" + database + "/documents/" + role));
    }
    
  • 您的规则使用角色
    canEditContent
    ,但您显示的数据使用
    editContent
    ,这是故意的吗


  • 如前所述,请提供完整的数据、查询和规则集,在这里我们看不到您使用的查询。还请注意,您可以使用Firestore emulator获取关于哪些规则失败以及失败位置的信息。

    而不必查看数据库中的所有实际数据,也不必查看应拒绝或允许查询的客户机代码,这里的内容只是理论上的。没有数据和客户端代码,规则就没有任何意义。还可以考虑,本地模拟器是调试客户端代码和测试数据的一种更有效的方式。我已经添加了@DougStevenson的屏幕截图,我将看看本地模拟器。谢谢还请显示这些规则允许或拒绝的客户端查询代码。我们需要能够看到在查询时所有这些数据是如何联系在一起的。具体的值在这里非常重要,包括数据和查询。但据我所知,文档引用包括完整路径?
    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        function isSignedIn() {
          return request.auth != null;
        }
        function getUser() {
          return get(/databases/$(database)/documents/users/$(request.auth.uid));
        }
        function getUserRole() {
          let role = get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role;
          return get(role);
        }
        match /curriculum/{curriculum} {
          allow write: if isSignedIn() && getUserRole().data.canEditContent;
        }
        match /users/{userId} {
          allow read, update, delete, write: if request.auth != null && request.auth.uid == userId;
          allow create: if request.auth != null;
        }
      }
    }
    
    function getUserRole() {
      let role = getUser().data.role;
      return get(path("/databases/" + database + "/documents/" + role));
    }