Можем ли мы позволить пользователю создавать данные только с указанными c полями, используя правила безопасности firestore? - PullRequest
0 голосов
/ 08 апреля 2020

При отправке данных я хочу убедиться, что мой клиент не может сохранять случайные поля.

Между тем, я хочу, чтобы мое приложение было максимально простым, и я пытаюсь сделать это, используя только правила firestore и / или индексы (то есть не использующие какую-либо сторону сервера express). Возможно ли это?

Я знаю, как проверить существование и тип поля:

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /example/{exampleId} {
      allow create: if "fieldOK" in request.resource.data &&
        request.resource.data.fieldOK is string
    }
  }
}

Но я не знаю, как заблокировать создание случайного поля, такого как " fieldBS ", когда вы не можете выполнять все действия oop в своих правилах.

1 Ответ

1 голос
/ 08 апреля 2020

Да, вы можете убедиться, что объект имеет только определенный диапазон клавиш, используя hasAll или hasOnly.

request.resource.data.keys().hasAll(['admin']);
request.resource.data.keys().hasOnly(['admin']);

Вы можете использовать это на произвольных уровнях вложенности на Map ( данные типа ключ / значение).

Справочник по правилам Firebase - отличный ресурс для подобных вопросов.

После проверки присутствия только поддерживаемого диапазона ключей, после этого все еще важно проверить правильность каждого отдельного поля.

...