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

Eli*_*hen 3 firebase firebase-security google-cloud-firestore

我有以下 Firestore 结构:

reports/{reportId}: {
  ...
  createdAt: Timestamp
  updatedAt: Timestamp
}
Run Code Online (Sandbox Code Playgroud)

在我的 Ionic(Angular)应用程序中,我获取结果如下:

this.afs
  .collection('reports')
  .orderBy('createdAt', 'desc')
  .limit(180)
Run Code Online (Sandbox Code Playgroud)

在我的规则中,我写了以下规则:

/reports/{reportId} {
  allow list: if request.query.limit && request.query.limit == 180
}
Run Code Online (Sandbox Code Playgroud)

只要有 180 个文档的限制,此规则就允许列出数据。问题是,如何强制查询按createdAtas排序desc?根据文档request.query.orderBy,但没有解释如何使用它

Dou*_*son 5

你是对的,目前这方面的文档基本上不存在。

request.query.orderBy是一个 Map,其中字段是其值被排序的键的名称,并且映射的值是“ASC”或“DESC”。所以,你的规则看起来像这样:

/reports/{reportId} {
  allow list: if request.query.limit &&
                 request.query.limit == 180 &&
                 request.query.orderBy.createdAt == "DESC"
}
Run Code Online (Sandbox Code Playgroud)

请记住,当前的实施request.query.orderBy存在重大问题。一个查询可以包含多个 orderBy 子句,并且它们的顺序非常重要。但是,目前无法确定安全规则中的顺序。 鉴于此缺点,将来可能会被删除或更改。request.query.orderBy