我正在尝试在其中有两个array-contains
的地方添加一个查询,由于Firebase不支持它,因此结果无法正常工作。
const initialQuery = Firebase.firestore.collection('class')
.orderBy('createdAt', 'desc')
.where('access.readAccess.classrooms', 'array-contains', id)
.where('keywords', 'array-contains', keyword)
.limit(5);
所以我最终写了类似下面的内容。
const initialQuery = firebase.firestore().collection('class')
.orderBy('createdAt', 'desc')
.where(`accessibleUsers.${id}.hasAccessTo.classrooms.read`, '==', true)
.where('keywords', 'array-contains', keyword)
.limit(5);
现在问题在尝试建立此数据的索引时,我看到索引仅在特定ID的范围内出现。在StackOverflow中看到一些答案后,我对整个索引感到有些困惑。
基于此,Indexing unknown nodes in Firebase就是说删除.where(`accessibleUsers.${id}.hasAccessTo.class.read`, '==', true)
并将规则添加到Firebase安全规则中以仅读取他有权访问的位置?
我该如何解决?任何帮助表示赞赏。
使用此代码:
.where(`accessibleUsers.${id}.hasAccessTo.classrooms.read`, '==', true)
您确实可以查询用户是否具有对多个教室的阅读权限。但是这样做的代价是您需要为id
的每个值定义一个索引。
公平警告:虽然在技术上可行,但手动维护这些索引通常不可行。您可能要考虑存储一个使其更可行的数据结构,例如,通过存储每个用户的类。