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

回到顶部