Функция size () для карты request.resource не соответствует ожиданиям - PullRequest
0 голосов
/ 06 мая 2019

Используя правила Firestore, я пытаюсь убедиться, что входящий запрос, который является объектом карты, имеет только 1 запись (т.е. только 1 ключ).Использование .size () == 1 всегда приводит к недостаточным разрешениям, а выполнение .size ()> 1 всегда правильно.

Запрос исходит из этого:

const batch = this.db.firestore.batch();
batch.update(frameUserRef, {
    [`users.${this.authService.currentUser.uid}.pictureCount`]: firebase.firestore.FieldValue.increment(1)
});
batch.commit();

And I 'Я пытаюсь использовать правило пожарного депо, такое как

request.resource.data.users.keys().size() == 1

// NOTE: This doesn't work either
request.resource.data.users.size() == 1

Однако, это никогда не приводит к истине, как я ожидал.Я пытаюсь помешать кому-либо присоединить другое обновление в этом вызове, например

const batch = this.db.firestore.batch();
batch.update(frameUserRef, {
    [`users.${this.authService.currentUser.uid}.pictureCount`]: firebase.firestore.FieldValue.increment(1),
    [`users.${ANOTHER_USER_ID_HERE}.pictureCount`].pictureCount: 100000 // MALICIOUS REQUEST
});
batch.commit();

Я что-то не так делаю?Или я неправильно понимаю функцию .size ()?Любая информация приветствуется.

РЕДАКТИРОВАТЬ: После дополнительного тестирования кажется, что .size() - это размер карты, которая в данный момент находится в Firestore (то есть на карте уже есть 4 записи, яЯ пытаюсь обновить только один, и .size () == 4).Похоже, он не приходит из запроса, как я хотел бы получить изображение request.resource.data из .... У кого-нибудь есть понимание этого?

...