💡
Firestoreのrulesでundefinedの判定が少し厄介だった話
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