【问题标题】:Firebase group security rule configurationFirebase 组安全规则配置
【发布时间】:2015-07-08 12:48:13
【问题描述】:

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

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

{
"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"
                  }
              }   
        }
    }

但我没有得到太多帮助。

对于代码,我已将其添加为提琴手:http://jsfiddle.net/digish_gabhawala/ytwmokg0/

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

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

如果我能弄清楚我做错了什么,那就太好了。

【问题讨论】:

  • data.child('users') -> root.child('users'),这整个子句似乎不需要:"data.child('users').child($userid);因为你已经在那个节点中,你可以做data.child('group'))
  • 除了我上面的评论之外,如果不知道您打算如何使用它们,即没有看到相关代码,就不可能说这些规则是否正确。
  • 感谢您的快速回复。我只是想确保如果我使用默认组中的任何用户登录,我应该能够看到同一组中的所有名称。这样,我打算能够跨用户共享数据。
  • 请将相关代码添加到您的问题中。因为如果你尝试像ref.child('users').orderByChild('group').equalTo('default').on('child_added'... 这样的东西,那是行不通的。见firebase.com/docs/security/guide/…
  • 嗨@FrankvanPuffelen,我根据您的建议更新了帖子,但由于功能未按预期工作,我仍然遗漏了一些东西。任何指针都会有很大帮助。

标签: firebase firebase-security firebase-authentication


【解决方案1】:

我很确定问题在于您使用的是$userid 而不是$uid。所以改变它应该使它工作。我在我的安全规则中使用$uid

【讨论】:

  • $ 事物是变量,可以有任何名称。重要的是您在属性名称中使用的变量名称与您在 .read.write.validate 中的名称相匹配。
猜你喜欢
  • 2016-06-27
  • 1970-01-01
  • 2016-08-19
  • 2020-09-06
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
相关资源
最近更新 更多