編集:それを実演しました。複数の場所の更新は、既存の値を上書きするように見える限り、更新とは異なります。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はマルチロケーション更新を別々に処理しますか?
ありがとうございました。