#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 предоставляется не соответствует существующему значению.