我想创建一个拥有大量用户数据的应用程序。假设每个用户跟踪每个任务的时间。如果我把它平放起来,它会是这样的:
{
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
},
...
}
}然后,我将设置我的安全规则,只允许创建任务的用户访问每个任务,我的ref查询如下所示:
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'));这就是我该怎么安排的吗?我的查询工作正常,但我不确定一旦引入了一个用户看不到另一个用户任务的安全性,它是否会工作。
发布于 2016-04-28 15:05:21
您已经读过不能使用安全规则来筛选数据。即使是创造性的数据建模也改变不了这一点。:-)
要正确保护对任务的访问,您需要如下所示:
"tasks": {
"$taskid": {
".read": "auth.uid === data.child(user).val()"
}
}这样,每个用户都只能读取自己的任务。
但是有了这些规则,您的查询就不能工作了。在这里,您的查询最核心的内容是从tasks读取:
ref.child('tasks/')...some-filtering...on(...由于您的用户没有对tasks的读取权限,此读取操作将失败。
如果您给用户在tasks上的读取权限,那么读取和查询就可以工作,但是用户也可以读取您不想让他们访问的所有任务。
https://stackoverflow.com/questions/36917793
复制相似问题