0

我在查询文档具有不同权限的集合时遇到问题。

无论如何要对集合执行查询以防止对我无法阅读的文档拒绝权限。如果我一次查询一个,我可以实现这一点。我需要查询集合以返回多个我可能没有权限的文档?我可以保留特定用户有权查询的文档 ID 列表,但我找不到任何有关指定文档数组的文档。

收藏:

Library > { libraryID } > {
   Users:{ uid, uid, uid },
   title: 'Title of library'
}

规则:

match /Library/{libraryID} {
  allow read: if get(/databases/$(database)/documents/Library/$(libraryID)).data.Users[(request.auth.uid)] == true;
}

如果用户 ID 在数据中,则权限受到限制。

这工作正常:

this.afs.collection<Library('Library').doc({libraryID}); // Everything works great

但是我需要集合中的多个项目,所以当我尝试类似下面的示例时如果失败,因为我没有对集合中所有文档的权限:

this.afs.collection<Library('Library'); //PERMISSION DENIED

我希望我可以使用查询来解决这个问题,但是因为它正在查看文档,所以它也失败了:

this.afs.collection<Library('Library',ref => ref.where('Users/'+this._uid, '==', 'true')); // PERMISSION DENIED

所以我希望我可以指定我可以访问的文档(这是我需要的)并将它们返回到一个集合中

this.afs.collection<Library('Library').doc([{libraryID},{libraryID2},{libraryID3}])

如果有人知道实现这一目标的解决方案,或者重构结构以实现这一目标,那将是一个巨大的帮助。

4

1 回答 1

0

试试这个规则

match /Library/{libraryID} {
  allow read: if exists(/databases/$(database)/documents/Library/$(libraryID)/Users/$(request.auth.uid));
}

也就是说,如果Users节点中存在当前用户 ID,则允许读取。

于 2017-11-15T18:57:03.890 回答