我正在使用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']);
}
}
}
你知道是什么原因造成的吗?