Есть ли альтернатива writeFields? - PullRequest
0 голосов
/ 03 ноября 2019

В этой статье говорится, что «[writeFields] устарела».
Кроме того, я не могу найти никакой документации для writeFields, она даже не указана как часть Request в документации больше.

Проблема

Проблема, с которой я сталкиваюсь с правилами безопасности Cloud Firestore, заключается в том, что проверка того, что изменены только определенные поля, требует огромного количества условий.
Например, если я хочу проверить, что единственным измененным значением документа является cakes, я должен написать следующее правило:

allow update: if request.resource.data.size() == 20
              && request.resource.data.likes == resource.data.likes
              && request.resource.data.name == resource.data.name
              && request.resource.data.date == resource.data.date
              && request.resource.data.body == resource.data.body
              && request.resource.data.title == resource.data.title
              && request.resource.data.tags == resource.data.tags
              && request.resource.data.comments == resource.data.comments
              && request.resource.data.answers == resource.data.answers
              && request.resource.data.awards == resource.data.awards
              && request.resource.data.image == resource.data.image
              && request.resource.data.link == resource.data.link
              && request.resource.data.format == resource.data.format
              && request.resource.data.type == resource.data.type
              && request.resource.data.user == resource.data.user
              && request.resource.data.views == resource.data.views
              && request.resource.data.reports == resource.data.reports
              && request.resource.data.roles == resource.data.roles
              && request.resource.data.category == resource.data.category
              && request.resource.data.votes == resource.data.votes
              && request.resource.data.cakes is int;

Используя writeFields, точно такой же правило выглядело бы так:

allow update: if request.writeFields.hasOnly(['cakes']) && request.resource.data.cakes is int;

Что я могу сделать, чтобы уменьшить размер кода моих правил / какова альтернатива writeFields?

Limits

Существуют два ограничения , упомянутые в документации, которые еще больше усугубляют эту проблему:

  • Максимальное количество выражений, оцениваемых за запрос: 1000

  • Максимальный размернабор правил: 64 КБ

Я ожидаю достичь обоих из них в какой-то момент с этим ограничением.

1 Ответ

0 голосов
/ 03 ноября 2019

К сожалению, то, что вы делаете сейчас, - ваш лучший выбор.

Команда правил Firebase работает над улучшением языка, чтобы упростить сравнение / различие объектов типа карты, что резко сократитиз-за количества выражений, которые требуются для такого рода вещей, но сейчас для этого нет графика времени. Пожалуйста, следите за обновлениями.

...