Я не верю, что это возможно в настоящее время (без использования устаревшего выражения, что настоятельно не рекомендуется), поскольку правила безопасности не позволяют различать значение, предоставленное для поля в обновлении документа, и значениесуществующего поля с тем же именем.Соблазнительно попробовать это, чтобы попытаться сравнить предоставленное значение с существующим значением:
allow update: if "apiKey" in request.resource.data
&& request.resource.data.apiKey == resource.data.apiKey;
Но когда вы говорите request.resource.data.apiKey
, это будет либо существующее значение поля вдокумент, или предоставленное значение.Таким образом, если кто-то просто не предоставит apiKey в обновлении, правило безопасности просто предоставит существующее значение apiKey, и запись будет разрешена.Это правило будет просто отклонять записи, когда apiKey предоставляется, не совпадает с существующим значением.