2017-02-09 10 views
0

Firebaseを使用してチャットアプリケーションを作成し、チャットにチャットしてユーザーをブロックする場合があります。Firebaseのルール:ユーザー名の書き込みを無効にする

私は次のように設定するには、私のブロック方法を作成しました:

chat_blocks/USERNAME_TO_BLOCK:true 

と私のルール:

".write": "!root.child('chat_blocks/'+newData.child('username').val()).exists()" 

しかし、それは誰もがブロックされました。私はいくつかの掘削をした2つの溶液を発見した

chat_messages 
-$key 
-- username 
-- message 

chat_messages/--list of messages 
+0

現在のデータベースツリーを追加すると便利です。 – eshirima

+0

@EmilDavid申し訳ありません。それは最も簡単です、私は構造体を追加しました – TheUnreal

+0

まず、Firebaseルールでは、親ノードで宣言されたルールがそのすべての子ノードに適用されますか? – eshirima

答えて

0

:として

私の構造が簡単です。

1.あなたのusers木の下でbannedForノードを追加することを検討し、ユーザー

の禁止を設定します。そして、あなたがしなければならないだろう、すべてはあなたのusersノードに移動し、それはあなたのルールになるとの情報が存在し、それらに.read.write

users 
    $uid 
    "bannedUntil": 1486599300 

の両方へのアクセス権を与えるものではありませんさて、それは何かを見てしまうことを確認していますメッセージレートを

リミットユーザが特定のタイムスロットで送信できるメッセージの量を設定し、この

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": "!data.child('bannedUntil').exists() || data.child('bannedUntil').val() < now" 
     } 
    } 
    } 
} 

2等が挙げられます。私はこのソリューションのrulesと一緒にjsfiddleを見つけました。これ以上の5,000人一ミリ秒未満

PSへ

スロットルのメッセージ:私は、これは必ずしもあなたの現在の問題を解決していない知っているが、それは別の解決策を提供します。

+0

これは素晴らしい代替手段です。ユーザーはサーバー側に格納され、Firebaseには格納されないため、現在のところ関連性がありません。 – TheUnreal

関連する問題