【发布时间】:2018-04-29 02:33:45
【问题描述】:
我在查询文档具有不同权限的集合时遇到问题。
是否有办法对集合执行查询以防止对我无法阅读的文档拒绝权限。如果我一次查询一个,我可以实现这一点。我需要查询集合以返回多个文档,而我可能没有权限访问某些文档?我可以保留特定用户有权查询的文档 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}])
如果有人知道实现这一点的解决方案,或重构结构以实现这一点,那将是一个巨大的帮助。
【问题讨论】:
-
您的用户节点究竟如何?它应该是一张地图。
-
文档中的User字段只是一个以uid为key、值为true的对象。它仅用于保留与库用户关联的列表或用户:{ 'sdfsdf234234234': true, 'oine345jnw3f': true }。当规则看它时,它只是看看它们是否存在
标签: angularjs firebase google-cloud-firestore angularfire5