我想创建一个有很多用户数据的应用程序。假设每个用户都跟踪他们自己的每个任务的时间。如果我将它平放它看起来像这样:存储用户数据Flattenned安全
{
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它说(接近尾声)“...直到我们进入成千上万的记录...”,然后没有解释如何处理。
所以我的问题如下。我知道我们无法通过安全进行筛选,但是我可以使用安全性限制用户访问的内容,然后在搜索时将其从用户标识中删除?然后我的结构会变成这样:
{
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'));
这是我该如何构造它?我的查询有效,但我不确定一旦我引入安全性,一个用户无法看到其他用户任务时它是否会工作。
这就是我害怕的!有没有解决的办法?你有关于如何构建数据的建议吗?我能想到的唯一事情就是隐藏每个用户的所有内容。附:感谢您的快速响应:) –
您的初始数据结构为每个用户列出了他们有权访问的任务的索引。因此,你不需要查询,你可以'ref.child('users')。child(authData.uid).child('tasks')。on(...'。 –
对,但是我怎么做得到所有的任务数据?这将让我知道什么是正确的ID? –