多くのユーザーデータを持つアプリケーションを作成したいと考えています。各ユーザーがタスクごとに独自の時間を追跡しているとします。これを格納すると、次のようになります。ユーザーデータの格納フラットセキュリティー
{
users: {
USER_ID_1: {
name: 'Mat',
tasks: {
TASK_ID_1: true,
TASK_ID_2: true,
...
}
},
},
tasks: {
TASK_ID_1: {
start: 0,
end: 1
},
TASK_ID_2: {
start: 1,
end: 2
}
}
}
これで、ユーザーのすべてのタスク情報を照会して取得したいと思います。現在、データは小さいです。彼らのガイドから:https://www.firebase.com/docs/web/guide/structuring-data.htmlそれは(終わり近くに) "...数万のレコードに入るまで..."と言い、それをどう扱うか説明していない。
私の質問は次のとおりです。私はセキュリティでフィルタリングを行うことはできませんが、セキュリティを使って人々のアクセス権を制限し、検索する際にユーザーIDからそれを外すことはできますか?私の構造は、これに回します:
{
users: {
USER_ID_1: {
name: 'Mat'
}
},
tasks: {
TASK_ID_1: {
user: USER_ID_1,
start: 0,
end: 1
},
TASK_ID_2: {
user: USER_ID_1,
start: 1,
end: 2
},
...
}
}
その後、私は、各タスクは、それを作成したユーザーがアクセスすることを可能にするだけに私のセキュリティルールを設定するだろう、と私の参照クエリは次のようになります。
var ref = new Firebase("https://MY_FIREBASE.firebaseio.com/");
$scope.tasks = $firebaseArray(ref.child('tasks/')
.orderByChild('user')
.startAt('USER_ID_1')
.endAt('USER_ID_1'));
私はそれをどう構造化すべきですか?私のクエリは機能しますが、一人のユーザーが別のユーザーのタスクを見ることができない場所にセキュリティを導入すると、動作するかどうかはわかりません。
これは私が恐れていたことです!これを回避する方法はありますか?データをどのように構造化できるかについての推奨事項はありますか?私が考えることができるのは、各ユーザーの下にすべて隠すことだけです。 p.s.迅速な応答ありがとう:) –
最初のデータ構造には、アクセス権を持つタスクを列挙する各ユーザーのインデックスがあります。あなたはクエリを必要としないので、単にref.child( 'users')することができます。child(authData.uid).child( 'tasks')。on(... '。 –
すべてのタスクデータを取得しますか?それでは、IDが何であるかを教えてください。 –