2

私はfirebaseでいくつかのテストを行い、規則の有効性の違いを確認しましたonDisconnect().update()と簡単なupdate()の間では、規則でnewData.parent()を使用しています。なぜ、検証ルールがonDisconnectの更新と異なる(のみ)動作するのですか?

私はupdate()を使用しています。しかし、onDisonnect().update()と私はPERMISSION_DENIEDを持っている!

データベースルール:

{ 
    "rules": { 
     "$id": { 
      ".read": true, 
      ".write": true, 
      "a": { ".validate": true }, 
      "b": { ".validate": "newData.parent().child('a').val() == 'a'" }, 
     } 
    } 
} 

Javascriptを:

const valid = { 
    a: 'a', 
    b: 'b' 
}; 

function update(obj) { 
    console.log('update', obj); 
    return ref.update(obj); 
} 

function onDisconnectUpdate(obj) { 
    console.log('onDisconnectUpdate', obj); 
    return ref.onDisconnect().update(obj); 
} 

update(valid); 
onDisconnectUpdate(valid); 

Full example code

See a screenshot here

私はあなたが私を助けることができると思います。 onDisconnect()動作中

+0

大きな質問ダグラス。私が下に投稿した(残念なことに)答えを掘るのに時間がかかりました。 –

答えて

0

ここfirebaser

我々はルールを検証している間、各プロパティは、個別の書き込み操作として扱われます。つまり、あなたの場合、操作は失敗します。これは不幸なデザインですが、近い将来に変更する可能性は低いです。このため、より簡単な書き込み操作をonDisconnect()ハンドラで使用することをお勧めします。

関連する問題