データベースのルールを使用して状態をロックに変更することは可能ですか?5分の書き込み操作がない場合はfalseですか? No.
あなたができることは次のとおりです。(私はあなたの質問の目的であるため、最初にルールオプションに取り組んでいますが、2番目のオプションがより適しているかもしれません)あなたの選択はあなたの選択です。
あなたのDB構造はこれと少し似ていると仮定します。
root: {
notes: {
$note: {
locked: true,
lockedBy: uid,
lockedOn: 1489181073472 // Time in milliseconds since UNIX epoch
}
}
}
あなたはロックが5分以上のためにされている場合は、他のユーザーがノートのデータを上書きすることを可能にするために、次のデータベースルールを使用することができます。基本的には、これは単にlocked: true
を無視します。欠点は、false
の値を聞いているリスナーがあれば、呼び出されないことです。ステップバイ
{
"rules": {
"notes": {
"$note": {
".read" : true,
".write": "data.child('lockedBy').val() === auth.uid || data.child('lock').val() === false || (data.child('lockedOn').val() + 300000) < now"
}
}
}
}
ステップ:どのようなこれらのルールはしますか(書き込みものを、読み出し1はかなり自明です):
このルールは常ににロックするために置かれた人が書くことができることができます:
data.child('lockedBy').val() === auth.uid
この規則は、ロックがfalseの場合、人々は書くことができますが保証:
data.child('lock').val() === false
そして、最後のものは、lockedOnが少なくとも5分以上経過していれば、人々が書き込むことができることを確認します。
(data.child('lockedOn').val() + 300000) < now
あなたは明らかに、ユーザーが認証さなどとされていることを確認するためにいくつかのより多くのルールを追加したいと思いますが、それは質問の範囲外です。
まだ、これは実際にあなたが望むものはありません。ロックが5分間以上オンであったかどうかを検出できるようにしたい場合は、そのロックを削除します。 Firebaseのチームが(昨日、どのタイミングで)のCloud FunctionsをFirebaseのにリリースして以来、運が良かったのです。基本的に、関数はNode.js環境を提供します。この環境では、クライアント側のコードと同じように、サーバー上でのみ関数を実行できます。現在ロックされているすべての音符をモニターし、5分以上ロックされていないことを確認する関数を書くことができます。彼らはあなたがそれらを更新することができます。これは、あなたがそれをクライアント側で行う必要なく、あなたが望むことをすることを可能にします。
リンク:
Introducing Cloud Functions for Firebase
Functions docs
Understand Firebase Realtime Database Rules
だから何あなたがここに提示してきたが[XY問題](http://meta.stackexchange.com/questions/です66377/what-is-the-xy-problem/66378#66378)。基本的には、ソリューションが 'lock:true'を使用していると判断し、問題の解決方法を尋ねる代わりに、解決方法を尋ねました。最高の答えはおそらく単にタイムスタンプをロックし、これに基づいて5mの書き込みを防止するためのセキュリティルールを書くだけなので、ここの答えはマークを見逃してしまいます。 – Kato