FireBase-如何列出用户特定的数据?
目前,我一直在研究FireBase,并且一直在使用AngularJS插件,并且发现了以下我无法解决的问题。
我目前已经实现了简单的登录系统。注册后使用我的邮件和密码登录,我创建了这样的帖子:
post = { name: "Hi",
message: "Guys",
user_id: Auth.user.id // for my current user this is 1
}
posts.$add(post)
从这一点来看,一切都很好。现在,我想做的是在firebase上的posts / endpoint中,我只想显示当前登录用户的帖子。
其他用户可以通过使用公共布尔变量来阅读其他人的信息(但这将在以后提供)
我一直在研究Firebase的安全API(请参阅:https : //www.firebase.com/docs/security/security-
rules.html)目前,我具有以下功能:
{ "rules": {
"posts": {
"$post": {
".read": "data.child('user_id').val() == auth.id",
".write": "(data.child('user_id').val() == auth.id) || (newData.child('user_id').val() == auth.id)"
}
}
}
}
它在一定程度上有效,只有登录后才能写帖子,但看不到任何帖子!
posts = new Firebase(base + '/posts')posts = $firebase(posts)
错误是:FIREBASE警告:/ posts的on()或一次()失败:错误:Permission_denied:客户端没有访问所需数据的权限。
如果有人有解决方案,那就太好了!
回答:
安全规则不能用作数据过滤器。您不仅可以阅读整个帖子的路径,而且希望仅检索允许查看的记录。取而代之的是,您需要以一种可以读取整个路径的方式来构造数据,或者存储可以查看并分别获取它们的记录的索引。
例如,按组标识或用户标识存储记录:
/posts/$group/data.../posts/$user/data...
然后,您可以通过将用户分配给适当的组,并简单地获取这些组的消息来确保用户具有权限:
var ref = new Firebase(base + '/posts/' + GROUP_ID);var posts = $firebaseArray(ref);
或者,您可以为每个用户/组/等可能查看的消息创建索引:
/posts/$post_id/data.../posts_i_can_view/$user_id/$post_id/true
并分别从主列表中获取它们。诸如Firebase-util之类的工具将使此过程变得更加简单:
var fb = new Firebase(base);var ref = Firebase.util.NormalizedCollection(
fb.child('posts_i_can_view/'+USER_ID),
fb.child('posts')
)
.select('posts.message', 'posts.user_id')
.ref();
var posts = $firebaseArray(ref);
进一步阅读Firebase数据结构:
https://www.firebase.com/docs/web/guide/structuring-data.html
https://www.firebase.com/docs/web/guide/understanding-data.html
https://www.firebase。 com / blog / 2013-04-12-denormalizing-is-
normal.html
以上是 FireBase-如何列出用户特定的数据? 的全部内容, 来源链接: utcz.com/qa/403952.html