Правила Firestore - Разрешить список только с orderBy - PullRequest
0 голосов
/ 18 марта 2019

У меня есть следующая структура 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?Согласно документам есть request.query.orderBy, но нет объяснения, как его использовать

1 Ответ

1 голос
/ 18 марта 2019

Вы правы, документации по этому вопросу в настоящее время практически не существует.

request.query.orderBy - это карта, в которой полями являются имена ключей, значения которых упорядочены, а значениями карты являются «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 может быть удален или изменен в будущем.

...