我有以下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
订购?根据docs有request.query.orderBy
,但没有解释如何使用它
你没错,目前这方面的文件基本上不存在。
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
。