我具有以下Firestore结构:
reports/{reportId}: {
...
createdAt: Timestamp
updatedAt: Timestamp
}
在我的Ionic(Angular)应用中,我这样获取结果:
this.afs
.collection('reports')
.orderBy('createdAt', 'desc')
.limit(180)
在我的规则中,我写了以下规则:
/reports/{reportId} {
allow list: if request.query.limit && request.query.limit == 180
}
只要不超过180个文档,此规则将允许列出数据。问题是,如何强制查询按createdAt
排序为desc
?根据{{3}},有request.query.orderBy
,但没有说明如何使用
答案 0 :(得分:1)
您是对的,目前有关此文档基本上不存在。
request.query.orderBy
是一个Map,其中的字段是按顺序排序的键的名称,并且该映射的值为“ ASC”或“ DESC”。因此,您的规则应如下所示:
/reports/{reportId} {
allow list: if request.query.limit &&
request.query.limit == 180 &&
request.query.orderBy.createdAt == "DESC"
}
请记住,request.query.orderBy
的当前实现存在严重问题。查询可以包含多个orderBy子句,它们的顺序确实很重要。但是,当前无法确定安全规则中的顺序。 鉴于此缺点,将来可能会删除或更改request.query.orderBy
。