Firestore Ruleで特定のKeyのみのupdateだけを許可する

1 min read読了の目安(約600字

Firestore ruleで、ひとつのキーだけの更新を許可し、他のキーは更新させたくない場合があったのでそのRuleの書き方について、メモとして残しておきます。

MapDiffを使う

下記の例では、 messagecolor の変更は許可したくないが、 likes_count だけの更新を許可したい場合があると思います。

{
  message: "test",
  color: "color",
  image_url: "url",
  created_at: "aaa",
  likes_count: 1 ← ここの更新だけを許可したい。
}

その場合のRuleはこう書きます。

allow update: if request.resource.data.diff(resource.data).changedKeys().hasAny(['likes_count']) || request.resource.data.diff(resource.data).addedKeys().hasAny(['likes_count'])

以上です。

参考

https://zenn.dev/sgr_ksmt/articles/bcf56f511769c4b1ccf9
https://qiita.com/ryo2132/items/23bd6cba1dab49f6275f