Правила безопасности Firestore на основе отдельных документов? - PullRequest
0 голосов
/ 20 апреля 2019

В моей коллекции Google Firestore у меня есть ряд документов. Каждый из этих документов имеет свои данные. В каждый из этих документов включено поле с именем api_key;

Используя Javascript, как бы я мог сделать так, чтобы команда set/update могла быть принята только в том случае, если команда правильно включает значение в api_key. Используя api_key, сценарий должен иметь возможность set/update любого содержимого в этом дереве документов ... и только в этом дереве документов.

Возможно ли что-то подобное?

1 Ответ

0 голосов
/ 20 апреля 2019

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

allow update: if "apiKey" in request.resource.data
    && request.resource.data.apiKey == resource.data.apiKey;

Но когда вы говорите request.resource.data.apiKey, это будет либо существующее значение поля вдокумент, или предоставленное значение.Таким образом, если кто-то просто не предоставит apiKey в обновлении, правило безопасности просто предоставит существующее значение apiKey, и запись будет разрешена.Это правило будет просто отклонять записи, когда apiKey предоставляется, не совпадает с существующим значением.

...