首页 > 解决方案 > Firebase 规则 - 模拟器说是,代码说不

问题描述

我正在开发一个使用 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']);
     }
  }
}

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

标签: firebasefluttergoogle-cloud-firestorefirebase-security

解决方案


推荐阅读