Firestore规则 - 仅允许使用orderBy列表

问题描述 投票:0回答:1

我有以下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订购?根据docsrequest.query.orderBy,但没有解释如何使用它

firebase google-cloud-firestore firebase-security-rules
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.