私は参加のリストが含まれていチャットのセットを持ってしようとし、そして、ユーザーごとにユーザーが参加あるチャットのリストを照会することができています。Firebaseルールはフィルタではないので、どのようにフィルタリングしますか?
サーバ側ではフィルタリングができません(スケーラビリティのためだと思います)、私が必要とする「フィルタリング」の各形式のリソース内のすべてのデータを準備する必要があることを理解しました。今の構造:
ものは、私は、データを保護するために書いたルールは以下のとおりです。
{
"rules": {
"users": {
"$user_id" : {
"chats" : {
".read":"auth != null && $user_id == auth.uid",
".write": "auth != null && !data.exists()"
}
}
},
"chats": {
"$chatId": {
".read":"auth != null && root.child('users').child(auth.uid).child('chats').child($chatId).exists()",
".write": "auth != null && !data.exists()"
}
}
}
}
最初のルール(/ユーザー/ &のuser_id /チャット)がOKであると意図したとおりに動作します。私はuser_idでクエリを実行し、ユーザーがアクセスする必要があるすべてのchat_idsのマップを取得できます。
二番目のルールは私がchat_idだったが、私が実際に持っていることはUIDとしてchat_idを持つ属性を含むオブジェクトのidである、と私は子供に得ることができないと思ったものをので失敗そのIDを知らなくても、rules are not filtersとなります。
私がチャットを保護することができる唯一の方法は、参加者のリストの文字列を使用して、そのチャットの子にcontains()を使用して、ユーザーが参加していないそのチャット。
別の方法がありますか?それは行く方法ですか?