1

以下を仮定します。Firebase:特定のデータを持つ子を除く親のすべての子ノードを読み取る方法

posts : { 
     "$postid":{ 
       "meta":{ 
         "state":true, 
         "text" :"I should be read", 
       }, 
       "likes":{ 
         "uid1":true, 
         "uid2":true, 
       }, 
     }, 
     "$postid":{ 
       "meta":{ 
         "state":false, 
         "text" :"I should be read", 
       }, 
       "likes":{ 
         "uid1":true, 
         "uid2":true, 
         "uid3":true, 
       }, 
     } 
} 

私は親ノード( 'posts')に次のように問い合わせます。

  • 状態=偽
  • との投稿が最も好き

セキュリティルール

  • とポストを優先出したままに読み取ることが偽==状態での投稿を拒否します。

は、ここで私はデータを照会しています方法をJavascriptのバージョンです。 ////$.fdr === firebase.database.ref();私は、ユーザーが投稿を削除し、後で削除取り消すことができるようにしたい:なぜこの

$.fdr("posts").orderByChild("time").limitToLast(20).once('value',function(r) { 
    var r = r.val(); 
    if(r !== null){     
     ///use r; 
    } 
},function(e){ 
     console.log(e); 
}); 

削除するには、 "post.meta.state"の値を "false"に変更します。 "post.meta.state"はfalseですが、セキュリティルールはその投稿を読むことを許可してはいけません。

問題:私はポストのノードではなく、親ノード(「投稿」)内のルールを設定した場合、

"postid": { 
      ".read":"data.child('state').val() == true" 
      } 

、私は「.read」を制限することができますが、私は照会ます場合にのみ、記事を次のように

firebase.database.ref("posts/postid"); 

をそうでなければ、私のような親ノードからの照会しようとした場合:

firebase.database.ref("posts/"), 

私は返信したくない投稿を除外することができるので、ルールを "投稿"の子から "投稿"(親)に昇格させる必要があり、子供のルールが無視され、そこに私は "状態" ==偽の返信投稿を拒否する方法を見つけることができないようです。

上記のこれまでのところ、私は迷ってしまいましたところ、正しい操作を行ってください私の理解に基づいています。

+0

あなたはundoubtablyすでに何かをしようとしました。あなたが試したことを教えてください。少なくとも、あなたがどのプラットフォームをターゲットにしているかはわかります。しかし、より多くの可能性はまた、あなたを助ける方法のより良い考えを私たちに与えるでしょう。 –

+0

@FrankvanPuffelen新しい編集をご覧ください。 – Relm

答えて

2

は残念ながら、時に親ノードを書き込み/読み取り権限など、ユーザーの任意の子ノードへの書き込み/読み込みをブロックすることはできません。 Firebase Docsでは、セキュリティルールがどのようにカスケードするかについて詳しく読むことができます。言っ

、あなたが考慮するために夫婦可能な解決策があります

  1. 代わりに削除済みとしてのポストをマークするの、あなたは別の親ノードにそれを移動することができます。次に、deleted_postsのセキュリティルールを調整して非表示にすることができます。

    { 
        "posts": { 
        "$postid1": { 
         "meta": { 
         "state": true, 
         "text": "I should be readable" 
         }, 
         "likes": { 
         "uid1": true, 
         "uid2": true, 
         "uid3": true 
         } 
        } 
        } 
        "deleted_posts": { 
        "$postid2": { 
         "meta": { 
         "state": false, 
         "text": "I should not be readable" 
         }, 
         "likes": { 
         } 
        } 
        } 
    } 
    
  2. 隠されていない場合は読みに表示されているpostidsの別のリストを維持し、読めないに「投稿」ノードを設定しますが、子供たち。あなたは、各ポストのためのデータを取得するために2番目のクエリを実行する必要があります。

    { 
        "posts": { 
        "$postid1": { 
         "meta": { 
         "state": true, 
         "text": "I should be readable" 
         }, 
         "likes": { 
         "uid1": true, 
         "uid2": true, 
         "uid3": true 
         } 
        }, 
        "$postid2": { 
         "meta": { 
         "state": false, 
         "text": "I should not be readable" 
         }, 
         "likes": {} 
        }, 
        "$postid3": { 
         "meta": { 
         "state": true, 
         "text": "I should be readable" 
         }, 
         "likes": {} 
        } 
        }, 
        "visible_posts": { 
        "$postid1": true, 
        "$postid3": true 
        } 
    } 
    
関連する問題