Правила безопасности Firestore на основе отдельных документов?

#google-cloud-firestore #firebase-security

#google-облако-firestore #firebase-безопасность

Вопрос:

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

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

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

Комментарии:

1. Я не уверен, чего вы пытаетесь достичь здесь. Может быть, вы могли бы расширить это, предложив некоторые запросы, которые должны быть разрешены или запрещены в различных случаях, по сравнению с некоторым фактическим содержимым документа.

2. Я хочу, чтобы люди могли редактировать свои документы с помощью javascript, но только в том случае, если они включают api_key соответствующее поле в этом документе. Я не мог бы дать код, который лучше объяснил бы это.

3. Хорошо, мне было непонятно, что вы подразумевали под «деревом документов». Это не тот термин, который использует Firestore.

Ответ №1:

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

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

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