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

Pet*_*sen 16 javascript angularjs firebase firebase-security

目前我一直在关注FireBase,并且一直在使用AngularJS插件,并且发现了以下我无法解决的问题.

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

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

从这一点开始,一切都很好.现在我想要做的是在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)"
            }
        }   
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作到一定程度,我只能在我登录时写帖子,但我无法阅读任何帖子!

posts = new Firebase(base + '/posts')
posts = $firebase(posts)
Run Code Online (Sandbox Code Playgroud)

错误是:FIREBASE警告:on /)或一次()/ posts失败:错误:permission_denied:客户端无权访问所需数据.

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

Kat*_*ato 20

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

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

/posts/$group/data...
/posts/$user/data...
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过将用户分配给适当的组来确保您的用户具有权限,并且只需获取这些组的消息:

var ref = new Firebase(base + '/posts/' + GROUP_ID);
var posts = $firebaseArray(ref);
Run Code Online (Sandbox Code Playgroud)

或者,您可以创建每个用户/组/等可以查看的消息索引:

/posts/$post_id/data...
/posts_i_can_view/$user_id/$post_id/true
Run Code Online (Sandbox Code Playgroud)

并从主列表中单独获取它们.像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);
Run Code Online (Sandbox Code Playgroud)

进一步阅读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 /博客/ 2013年4月12日,反规范化,是-normal.html