【问题标题】:Firebase remove child permission deniedFirebase 删除子权限被拒绝
【发布时间】:2017-04-15 16:21:00
【问题描述】:

JSON 如下所示:

我想从 user_lookup 中删除 [steven : uid] 的孩子

这是代码:

self.ref.child("user_lookup").queryOrderedByValue().queryEqual(toValue: user?.uid).observe(.value, with: { snapshot in

                            if snapshot.exists() {

                                print("I got it")
                                // remove [steven, uid]

                            } else {

                                print("Not found")

                            }

我不知道如何删除孩子,但我尝试输入 removeValue 但我得到了 Permission_denied

规则如下:

`"user_lookup": {
      ".read": "auth !== null",
            ".write": "auth !== null && !data.exists()",

        ".indexOn": [".value"],

我认为是因为“!data.exists()”,但我不想复制数据,那么如何解决这个问题? 以及如何删除孩子,任何帮助将不胜感激。

【问题讨论】:

  • 如果数据已经存在,您的规则非常明确地拒绝写入操作。您可以描述您想要想要什么,而不是用数据说明您不想要什么?例如:“我希望经过身份验证的用户能够使用他们自己的 UID 写入他们的姓名并删除他们的姓名(使用他们自己的 UID)。”
  • 还要确保用户已登录
  • @FrankvanPuffelen 如果 [name 或 uid] 尚不存在,我希望 auth 用户写下他们的姓名和他们的 uid。就像我不能写 'steven' 因为它已经存在于另一个用户中,我希望 auth 用户使用 uid 删除他们的名字。
  • @FrankvanPuffelen 有什么帮助吗?

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


【解决方案1】:

我想这可能是你想要的:

".write": "
  (auth.uid === newData.val() && !data.exists()) || 
  (auth.uid === data.val() && !newData.exists()"

第一个表达式或 or 允许用户声明他们的名字,如果它还不存在的话。然后第二个表达式允许删除他们的声明。

【讨论】:

  • 感谢您的帮助!但它不起作用,我什至不能用模拟器写任何东西i.gyazo.com/55b970896146430ff7e6c7a223fab44e.png
  • 如果我通过数据库添加已经存在的名称,例如“justin”为另一个 uid,uid 将被更新,所以名称被盗我不希望发生这种情况,我希望每个用户都有不会与其他用户重复的不同名称,每个用户都可以用其他不存在的名称更新他的名字,每个用户可以用他的 uid 从数据库中删除他的名字。它的用户名系统,希望你明白并能帮助我
  • 您在屏幕截图中写的值不是 UID。它是一个包含 UID 的 JSON 对象。要了解您在问题中的结构,请将数据更改为 "xx"
  • 我已经执行了“snapshot.ref.removeValue()”,但出现错误“setValue: or removeValue: at /user_lookup failed: permission_denied”
猜你喜欢
  • 2020-02-15
  • 2017-12-26
  • 2012-12-17
  • 2020-07-31
  • 2018-03-06
相关资源
最近更新 更多