質問は以下の拡張された発送枝についてです。どこでも認証されたユーザーだけがOWNのデータをどこにでも書くことができます。ただし、1つの例外があります。 ANY認証済みのユーザーかもしれません。のデータを読んでください。認証されたユーザによる古いデータの削除のみを許可するFirebaseルール
は、これまでのところ、私は何の問題もなかったが、ここ1つの、特殊なルールです:船のブランチタイムスタンプが10秒またはそれ以上の年齢であることを提供して
がANY認証されたユーザが任意のUIDの下に子を削除することができます。
私はすべてのユーザが呼び出すことができるようにしたい:
firebase.database().ref('/ships/gp3tJa3tgThukt39EejqJpZq12L2/granit').remove();
uid: gp3tJa3tgThukt39EejqJpZq12L2
shipid: granit
そしてだけ削除する権限を付与します。
は、レコードの年齢を確認するために、私は(このレコードが頻繁に更新されるので、私はここに、配列を使用していると私は最小限にデータを保存しておきたい)インデックス0
でperf
配列にfirebase.database.ServerValue.TIMESTAMP
を保存。
クライアント側では、レコードが期限切れになる可能性が高く、その後は削除を呼び出すことができます。これは無駄な通話を避けるためです。
私は正しいルールを定義するためにいくつかの助けが必要です。問題の行は、このルールを定義しようとした2番目の例で強調表示されています。
{
"ships": {
"EnBawzb0CjZVgAKrMZD4HE3k5rW2": {
"oasisoftheseas": {
"param": {
"scale": 0.33075936163570846,
"type": "cruise/royalcaribbean/oasisoftheseas"
},
"perf": {
"0": 1,
"1": 1.11014724E7,
"2": 1.70473256E7,
"3": 115.7,
"timeStamp": 1475144447302
}
}
},
"gp3tJa3tgThukt39EejqJpZq12L2": {
"granit": {
"param": {
"scale": 0.12235531736978282,
"type": "riverbarge/granit"
},
"perf": {
"0": 5,
"1": 2.05622392E7,
"2": 13154087,
"3": 285.9,
"timeStamp": 1475144450086
}
}
}
}
}
以下のルール。私が正しく定義することに興味があるのは$ shipidの書き込みルールです。
{
"rules": {
"anchors": {
"$uid":{
".read": "auth.uid === $uid",
".write": "auth.uid === $uid"
}
},
"completed": {
"$uid":{
".read": "auth.uid === $uid",
".write": "auth.uid == $uid"
}
},
"ships": {
".read": "auth !== null",
"$uid":{
".write": "auth.uid === $uid",
"$shipid":{
".write": "((auth !== null) &&
(now - data.child('perf').child('timeStamp').val() >= 10000))"
}
}
},
"shipslog": {
"$uid":{
".read": "auth.uid === $uid",
".write": "auth.uid === $uid"
}
}
}
}
あなたの質問にJSONツリーの画像が含まれています。 Firebaseデータベースコンソールの[エクスポート]ボタンをクリックすると、実際のJSONをテキストとして置き換えてください。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。ルールにも同じです。 –
こんにちはフランク。画像をJSONデータに置き換えました。私はルールを更新し、私はそれが今働いていると思う。それでもあなたのフィードバックに感謝します。私はこの種の事がいつも起こる中間層がないので想像しています。私は絶対にfirebaseを愛しています。ちょうどそれを使用し始め、学習のほとんどの時間を過ごす。 –
ヘイ・ポール。私はあなたのルールをテストデータベースにコピーし、シミュレータは削除操作を許可します( '/ ships/gp3tJa3tgThukt39EejqJpZq12L2/granit'に' null 'を書き込むことによってシミュレートします)。あなたがしようとしていることではありませんか? –