Firebase规则-模拟器说“是”,代码说“否”

时间:2018-11-12 21:28:04

标签: firebase flutter google-cloud-firestore firebase-security-rules

我正在使用Firebase作为后盾的Flutter应用程序上工作。我已经在Firebase中设置了基于组的角色,并且Firebase中的规则模拟器告诉我正在测试的用户可以访问该文档。当我在Flutter代码中进行查询时,我可以看到它找到了文档,并且可以稍等片刻就看到它,然后改变了主意,并且得到了“听学生查询失败:缺少权限或权限不足”。并将文档从快照中删除。

在Flutter代码中使用的查询如下:

Firestore.instance.collection('students').where('test', arrayContains: userID).orderBy('name').snapshots()

我一直在处理文档,并为当前用户尝试了不同的方法来查询文档,并且为了进行测试,我创建了一个带有userId的数组并进行查找。

如果我完全跳过规则,只是将“需要登录”作为要求,那么我会得到一份文档,但是一旦我使用基于角色的角色,它便会回到绘图板上。我设置的规则是:

service cloud.firestore {
  match /databases/{database}/documents {
     match /students/{student} {
        function isSignedIn() {
          return request.auth != null;
        }
        function getRole(rsc) {
          return rsc.data.roles[request.auth.uid];
        }
        function isOneOfRoles(rsc, array) {
          return isSignedIn() && (getRole(rsc) in array);
        }
        allow read, write : if isOneOfRoles(resource,['teacher', 'student', 'parent']);
     }
  }
}

你知道是什么原因造成的吗?

0 个答案:

没有答案