2016-11-09 8 views
0

編集:それを実演しました。複数の場所の更新は、既存の値を上書きするように見える限り、更新とは異なります。Firebaseマルチロケーションアップデートでセキュリティルールが異なる方法で処理されますか?

私は、複数の場所の更新に関するセキュリティルールを把握するのに苦労しています。今まで私はprofileDataは、いくつかのフィールドを含むオブジェクトであるFBでのユーザープロファイルを、更新するには、このコード

return this.userProfileRef.child(firebase.auth().currentUser.uid).update(profileData); 

を持っていました。

私は同じ操作をしようとすると、私は書き込み操作(複数の場所の更新)を追加できるように書かれている、私は検証エラーが表示されます。

var updateData = {}; 
updateData['users/' + firebase.auth().currentUser.uid] = profileData; 
return firebase.database().ref().update(updateData); 

私のセキュリティルールが

{ 
    "rules": { 
    ".write": "true", 
    ".read": "true", 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "!data.exists() || (data.exists() && auth.uid === $uid)", 
     "profileStatus": { 
      ".validate": "!data.exists() || (newData.parent().hasChildren(['firstName', 'dateOfBirth', 'gender', 'lookingForGender', 'lookingForAgeMin', 'lookingForAgeMax', 'lookingForRadius']) && data.val() === 'incomplete' && newData.val() === 'awaitingVerification')" 
     } 
    } 
    } 
} 

ある検証は、上に書いたように私は、マルチロケーションの更新を行う際に、profileStatusに失敗しますが、私は「通常」の更新を行う際に渡します。

誰かが助けてくれて、私がここで何が欠けているか教えてもらえますか?セキュリティルールに関しては、fbはマルチロケーション更新を別々に処理しますか?

ありがとうございました。

答えて

0

わかりました。自分の質問に答えてください。マルチレーション更新はマルチルコレーションセットのように機能するようですので、検証に失敗した既存の値を上書きします。

私はこのbeviourによってまだ混乱しています... firebaseのブログに続いて、私は思っていました、それは更新のようなものです。

私の例では、私はdateOfBirthと呼ばれる既存のキーを持っています。複数の更新を実行すると、このキーは削除されます

関連する問題