web-dev-qa-db-ja.com

Cloud Firestoreルール-キーがnullかどうかを確認する方法

Cloud Firestoreルール-taskというドキュメントがあり、一部のデータ(assigneeフィールド)がnull /存在しないかどうかを確認したい。

私はもう試した:

  1. _resource.data.assignee == null_-機能しません(エラー)
  2. !resource.data.hasAll(['assignee'])-機能しません(エラー)

ドキュメントから-これは実際にエラーが発生すると述べています:_// Error, key doesn't exist allow read: if resource.data.nonExistentKey == 'value';_

11
Gal Bracha

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'])
19
Callam

ドキュメントを見る- 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) 
3
pdkn