gpt4 book ai didi

javascript - FireBase - 如何列出用户特定的数据?

转载 作者:可可西里 更新时间:2023-11-01 01:24:01 24 4
gpt4 key购买 nike

目前一直在看FireBase,一直在使用AngularJS插件,发现如下问题无法摆脱。

我目前已经实现了简单的登录系统。注册后使用我的邮箱和密码登录,我创建了一个这样的帖子:

post = {
name: "Hi",
message: "Guys",
user_id: Auth.user.id // for my current user this is 1
}
posts.$add(post)

从这一点开始一切都很好。现在我想做的是在 firebase 的 posts/端点中,我只想显示当前登录用户的帖子。

其他用户可以通过拥有一个公共(public) bool 变量来阅读其他人的帖子(但那是以后的事)

我一直在研究 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 WARNING: on() or once() for/posts failed: Error: permission_denied: Client doesn't have permission to access the desired data.

如果有人有解决方案那就太棒了!

最佳答案

安全规则不能用作数据过滤器。您不能只阅读整个帖子路径并期望只检索允许您查看的记录。相反,您需要以可以读取整个路径的方式构建数据,或者存储可查看记录的索引并单独获取它们。

例如,按组id或用户id存储记录:

/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

关于javascript - FireBase - 如何列出用户特定的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21500946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com