Firestore规则-仅允许带orderBy的列表

时间:2019-03-18 14:33:52

标签: firebase google-cloud-firestore firebase-security-rules

我具有以下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,但没有说明如何使用

1 个答案:

答案 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