firebase - 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']);
}
}
}
知道是什么原因造成的吗?
解决方案
推荐阅读
- azure-pipelines-yaml - 从 Azure DevOps 管道模板访问调用文件夹的文件
- spring-boot - 使用 Oracle 的 Spring Boot 可分页计数查询错误
- python - Xlwings:如何将单个单元格中的两个逗号分隔值作为列表而不是浮点数读取?
- entity-framework - 如何通知用户在他缺席期间所做的所有更改
- bash - 如何编写一个 bash 脚本来退出程序?
- python - 使用matplotlib(python)在boxplot中添加补丁
- python - 我如何遍历每一行,并为每一行将结果附加到一个列表中?
- typescript - 具有多个参数的函数接口?
- python - 如何在字典的嵌套列表中获取随机项?
- docker - worldserver Docker 容器的日志文件在哪里?