Firebase组安全规则配置

Firebase组安全规则配置,firebase,firebase-security,firebase-authentication,Firebase,Firebase Security,Firebase Authentication,我是Firebase的新手,我尝试设置安全规则,希望用户按动态创建的组分组。我还希望用户能够读取同一组的所有内容,但不能读取其他组的内容 当我创建新用户并使用push为他们分配一些组时,我会得到如下数据: { "groups" : { "default" : { "-Jtcdyniz1yVwNQCGSAR" : { "user" : "simplelogin:5" }, "-Jtd114KNQ-rqh6-rlnI" : { "user" : "simplelogin

我是Firebase的新手,我尝试设置安全规则,希望用户按动态创建的组分组。我还希望用户能够读取同一组的所有内容,但不能读取其他组的内容

当我创建新用户并使用push为他们分配一些组时,我会得到如下数据:

{
"groups" : {
 "default" : {
  "-Jtcdyniz1yVwNQCGSAR" : {
    "user" : "simplelogin:5"
  },
  "-Jtd114KNQ-rqh6-rlnI" : {
    "user" : "simplelogin:7"
  }
}
},
"users" : {
"simplelogin:5" : {
  "group" : "default",
  "name" : "123"
},
"simplelogin:6" : {
  "group" : "default1",
  "name" : "1"
},
"simplelogin:7" : {
  "group" : "default",
  "name" : "23"
}
}
}
有人能帮忙吗?如何设置身份验证规则?我尝试了以下方法,但似乎不起作用

    {
        "rules": {

            "users" : {
                "$userid" : {
                  ".read" : "data.child('users').child($userid).child('group').val() === data.child('users').child(auth.id).child('group').val()",
                  ".write" : "$userid === auth.uid"
                  }
              }
        }
    }
我认为这应该是一个相当简单的用例,但不幸的是没有得到太多的帮助

我发现的任何帖子都有直接用户在一个组中,而不是一个随机、唯一字符串的子组

编辑:

我尝试过编辑规则,如:

    {
        "rules": {
            "groups" : {
                ".read" : "true",
                ".write" : "true"
              },
            "users" : {
                "$userid" : {
                  ".read" : "data.child('group').val() === root.child('users').child(auth.id).child('group').val()",
                  ".write" : "$userid === auth.uid"
                  }
              }   
        }
    }
但我没有得到多少帮助

对于代码,我已将其作为小提琴手添加到:

我现在想要的是两件简单的事情: 1> 作为一个用户,我应该能够编辑我的名字 2> 当我点击按钮时,我应该能够得到我组中所有用户的名字

当我在fiddler中尝试代码时,我遇到了权限问题


如果我能知道我做错了什么,那就太好了。

我很确定问题在于您使用的是
$userid
而不是
$uid
。因此,改变这一点应该可以让它发挥作用。我在我的安全规则中使用了
$uid

我很确定问题在于您使用的是
$userid
而不是
$uid
。因此,改变这一点应该可以让它发挥作用。我在我的安全规则中使用了
$uid

这些
$
东西是变量,可以有任何名称。重要的是,在属性名中使用的变量名与
.read
.write
.validate
中的变量名匹配。
$
对象是变量,可以有任何名称。重要的是,在属性名中使用的变量名与
.read
.write
.validate
data.child('users')
->
root.child('users')
中的变量名相匹配,整个子句似乎不需要:
“data.child('users').child('userid)
;因为您已经完全处于该节点中,所以只需执行
data.child('group')即可
)除了我上面的评论之外,如果不知道您打算如何使用这些规则,也就是说,如果没有看到相关的代码,就无法判断这些规则是否正确。感谢您的快速响应。我只想确保如果我与默认组中的任何用户一起登录,我应该能够看到同一个组中的所有名称向上。这样,我希望能够跨用途共享数据。请将相关代码添加到您的问题中。因为如果您要尝试类似于
ref.child('users')。orderByChild('group')。equalTo('default')。的操作,请('child_added'…
不起作用。请看Hi@FrankvanPuffelen,我根据您的建议更新了帖子,但仍然缺少一些东西,因为功能没有按照预期工作。任何指针都会有很大帮助。
data.child('users')
root.child('users'),整个条款似乎都不需要:
”data.child('users').child('userid)
;由于您已经完全处于该节点中,因此只需执行
data.child('group')
)除了我上面所说的话,如果不知道您打算如何使用这些规则,也就是说,如果没有看到相关的代码,就无法判断这些规则是否正确。感谢您的快速响应。我只想确保如果我与默认组的任何用户一起登录,我应该能够看到同一组中的所有名称。这这样,我希望能够跨用途共享数据。请将相关代码添加到您的问题中。因为如果您要尝试类似于
ref.child('users').orderByChild('group').equalTo('default')。on('child_added'…
那不行。请看Hi@FrankvanPuffelen,我根据你的建议更新了帖子,但我还是遗漏了一些东西,因为功能没有按照预期工作。任何提示都会有很大帮助。