💡

Firestoreのrulesでundefinedの判定が少し厄介だった話

2022/03/25に公開

Firestoreのrulesで、
resource.dataを使った判定をするときに、
対象のフィールドがundefinedだったときに、
少し厄介なことになったのでそれを共有します。
以下のような判定をしていたときに、通常のJSだとundefinedだった時は、
trueとなって条件に一致するはずだと思うのですが、
Firestoreのrulesの場合は対象のフィールドが存在しない時は、
エラー扱いになって条件に一致しなくなってしまうようです。

// isFollowはBoolean型が入ることを想定している
// isFollowはundefinedになることがある
allow read: if !resource.data.isFollow

解決方法

keysでドキュメントのキーを取得してそこにキーが存在しない==undefinedという判定をする必要があるそうです。

allow read: if !resource.data.keys().hasAll(['isFollow'])
	|| !resource.data.isFollow

Discussion