【问题标题】:Firebase read/write permission for certain users某些用户的 Firebase 读/写权限
【发布时间】:2017-04-11 20:05:56
【问题描述】:

我有一个家庭,A、b、c、dA是领导​​。我们有一个入侵者,E。我们只希望 b, c, d 读取/写入 A 的数据。

所有这些字母(b、c d、...)都是 UID 的

这是我目前所拥有的:

每个人都通过电子邮件进行身份验证。人们向 A 发送请求以允许加入他的组。如果他接受,他们可以读/写他的。

数据库 Firebase 的设计

{
  "Leaders" : {
    "A" : {
      "ALLOWED" : {
        "b" : 0,
        "c" : 0,
        "d" : 0
      },
      "DATA" : {
        "blah blah1" : "content writable by bcd",
        "blah blah2" : "content writable by bcd"
      },
      "REQUESTS" : {
        "E" : 0
      }
    }
  }
}

我可以使用 CRUD 来移动 b, c, d 但我如何制定规则以便遵循只有 ALLOWED 中的人才能读/写每个领导者的数据?

    {
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
    "Leaders":{
    ".write": "$uid == ????"
    }
  }
}

感谢您的帮助!

【问题讨论】:

  • 您在问题中包含了 JSON 树的图片。请将其替换为作为文本的实际 JSON,您可以通过单击 Firebase 数据库控制台中的导出 JSON 链接轻松获取该文本。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
  • @FrankvanPuffelen,啊!抱歉,我不知道我们可以做到这一点,将在几分钟内更新

标签: android firebase firebase-realtime-database firebase-security


【解决方案1】:

应该是检查当前leader下是否存在节点的问题:

{
  "rules": {
    "Leaders":{
      "$leaderuid": {
         ".write": "$leaderuid == auth.uid",
         "DATA": {
           ".write": "data.parent().child('ALLOWED').child(auth.uid).exists()"
         }
       }
    }
  }
}

我改变的地方:

  • 删除顶级读/写规则。否则,任何经过身份验证的用户都可以读取/写入所有数据,并且您永远无法再在较低级别取消该权限。
  • 领导者可以写入他们的整个节点。我在这里使用auth.uid,如documentation on securing user data 中所述。
  • 如果用户的 uid 存在于 ALLOWED 节点中,则用户只能在 DATA 下写入。

【讨论】:

  • 嗨。你能解释一下“$leaderuid”是什么意思吗?非常感谢这个答案
  • 我的意思是,当你有 $leaderuid$ { } 时,这是什么上下文?
  • 另外一个错误是在带有“DATA”的行中需要一个“, )”
  • 感谢您发现这个错字。任何以$ 开头的键都只是一个通配符/变量。请参阅 Firebase 文档以了解更多信息:firebase.google.com/docs/database/security/…
  • 感谢您的回复。我已经阅读了很多关于它的内容,但我仍然无法理解这一点。我会问一个新问题,因为它是一个一般的 firebase 问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 2021-09-04
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多