Cloud Firestoreルール-task
というドキュメントがあり、一部のデータ(assignee
フィールド)がnull /存在しないかどうかを確認したい。
私はもう試した:
resource.data.assignee == null
_-機能しません(エラー)!resource.data.hasAll(['assignee'])
-機能しません(エラー)ドキュメントから-これは実際にエラーが発生すると述べています:_// Error, key doesn't exist allow read: if resource.data.nonExistentKey == 'value';
_
Firestoreセキュリティルールドキュメントのリスト比較 here を読むと、すべての値がリストに存在する場合、hasAll
がtrueを返すことがわかります。
// Allow read if one list has all items in the other list
allow read: if ['username', 'age'].hasAll(['username', 'age']);
request.resource.data
は、フィールドと値を含むマップです。 hasAll
を使用するには、まず here のように、キーを値のリストとして取得する必要があります。
!resource.data.keys().hasAll(['assignee'])
ドキュメントを見る- https://firebase.google.com/docs/reference/rules/rules.Map
k in x - Check if key k exists in map x
これは動作するはずです(keys()なしで)
!('asignee' in resource.data)