2017-10-08 7 views
1

クラウドファイアストアルール - taskというドキュメントがあり、一部のデータ(assigneeフィールド)がnullであるかどうかを確認したい/存在しません。クラウドFirestoreのルール - キーがnullであるかどうかを確認する方法

私が試した:

  1. resource.data.assignee == null - ドキュメントから(エラー)

は動作しません - - それは、これが実際に作成されますと述べている(エラー)

  • !resource.data.hasAll(['assignee'])動作しませんエラー: // Error, key doesn't exist allow read: if resource.data.nonExistentKey == 'value';

  • +0

    フルルール・ファイルである - 私は '試合を/使用していますので、' resource'が文書であることを理解したようhttps://github.com/Metaburn/doocrate/blob/master/firestore.rules タスク/ {anyTask} {' リソースに関するfirebaseドキュメント - https://firebase.google.com/docs/firestore/reference/security/#resource_1 –

    +0

    ドキュメントを確認する必要はありません - ドキュメントを知っていますある。 その文書の中のフィールドをチェックしたいと思います。 '/ tasks/my-task'の場合 - ' tasks'はコレクションです。 'my-task'はドキュメントです。内部に 'assignee'フィールドがあります - ヌルであるかどうかわかりません。 –

    +0

    ' resource.data.keys() '関数があります。' hasAll(['assignee'] ) 'これではなく。 – Callam

    答えて

    5

    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']) 
    
    +0

    '!( 'resource.data.keys()内のasignee'もうまく動作しますか?もう一つ注意すべきことは次の通りです。ドキュメント: "リソースに存在するリクエストに含まれていないフィールドは、' request.resource.data'に追加されます。ルールは 'requestを比較することによってフィールドが変更されたかどうかをテストできます。 resource.data.foo'を 'resource.data.foo'に設定すると、' resource'のすべてのフィールドも書き込み要求でサブミットされなかったとしても 'request.resource'に存在します。"キーが存在し、あなたがそれを期待していない時間 – menehune23

    関連する問題