使用Firebase RuleDataSnapshot方法访问用户数据 [英] Using Firebase RuleDataSnapshot Methods to access user data

查看:130
本文介绍了使用Firebase RuleDataSnapshot方法访问用户数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



  root {
PrivateRooms {
< PrivateRoomName> {
...
}
}
用户{
{
permissionFrom {
< PrivateRoomName>:value is不是私人房间名称
}
...
}
}
}

...我如何编写规则来授予对<





 rules:{
PrivateRooms:{
$ roomName:{
.read:root.child('users' ).child(auth.uid).child('permissionFrom')。hasChild('$ roomName')== true,
.write:root.child('users')。child .child('permissionFrom')。hasChild('$ roomName')== true

},
users:{
.read :true,
.write:true
}
}
}

...但是在跳过这个数据快照的时候,规则必然是错的:

  var testRef = new Firebase('https://my.firebaseio.com/privateRooms/<privateRoomName>/privRoomChild'); 
testRef.once(value,function(snapshot){
var testVal = snapshot.val();
console.log(testVal);
});


解决方案

 $ roomName: {
.read:root.child('users')。child(auth.uid).child('permissionFrom')。hasChild($ roomName),
.write: hasChild($ roomName)
}

If I have data like this:

        root{
           PrivateRooms{
             <PrivateRoomName>{
               ...
             }
           }
           users{
             <uid>{
               permissionFrom{
                   <PrivateRoomName>:value is not private room name 
               }
                ...
             }
           }
         }

...how do I write rules to grant access to < PrivateRoomName > based on the user's permissionFrom children?

I thought this would work:

{
  "rules": {
    "PrivateRooms" : {
      "$roomName":{
        ".read" : "root.child('users').child(auth.uid).child('permissionFrom').hasChild('$roomName') == true",
        ".write" : "root.child('users').child(auth.uid).child('permissionFrom').hasChild('$roomName') == true"
      }
    },
    "users" : {
      ".read" : true,
      ".write" : true
    }
  }
}

...but something must be wrong with the rules as this data snapshot is skipped over:

var testRef = new Firebase('https://my.firebaseio.com/privateRooms/<privateRoomName>/privRoomChild');
testRef.once("value", function(snapshot){
    var testVal = snapshot.val();
    console.log(testVal);
});

解决方案

In your rules, $roomName is a variable, so it should not be wrapped in quotes.

  "$roomName":{
    ".read" : "root.child('users').child(auth.uid).child('permissionFrom').hasChild($roomName)",
    ".write" : "root.child('users').child(auth.uid).child('permissionFrom').hasChild($roomName)"
  }

这篇关于使用Firebase RuleDataSnapshot方法访问用户数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆