Используя правила 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
из .... У кого-нибудь есть понимание этого?