结合Firestore规则和集合查询

时间:2018-10-10 15:39:51

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

我的情况类似于this,但是由于某种原因,那里的解决方案不起作用。我试图将对集合中文档的读取限制为仅对该文档列为“管理员”的人员。示例数据:

projects/
  id001/
    name: 'Project 1'
    roles: {
      uid001: 'admin'
    }
  id002/
    name: 'Secret Project'
    roles: {
    }

因此,我的uid用户中uid001的用户应该能够读取Project 1,但没有其他内容。我的安全规则是:

match /projects/{projectId} {
  allow read: if get(/databases/$(database)/documents/projects/$(projectId)).data.roles[request.auth.uid] == 'admin';
  allow write: if false;
}

现在,如果我明确要求有关文档:

return firebase.firestore().collection('projects')
.doc('id001')
.get().then(snapshot => {
  return snapshot
})

一切都很好,并且正如预期的那样,尝试获取项目id002失败。但是,当尝试查询文档时,应该允许我访问:

return firebase.firestore().collection('projects')
.where('roles.uid001', '==', 'admin')
.get().then(snapshot => {
  return snapshot.docs
})

然后整个查询以Missing or insufficient permissions.失败。我在网上发现的许多类似示例似乎都使用了这种方法,但是事实是不允许客户端 read 的事实意味着.where()查询无法按顺序访问数据筛选我们不可用的文件?那是我唯一的结论,但是似乎有很多人正在努力,我想知道我是否还缺少其他东西。

0 个答案:

没有答案