首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防火墙数据库规则:不能写入数据库

防火墙数据库规则:不能写入数据库
EN

Stack Overflow用户
提问于 2018-02-12 03:42:39
回答 1查看 577关注 0票数 2

我试图设置一些重要的写作任务,但我无法解决我的问题。我被告知,如果我在房间中添加了一个写规则,那么我就会覆盖我的房间/$ room I/ingame规则。

我想做的是

创建一个由用户创建的机房。只由房间的创建者设置/更新房间的。(起作用)

规则

代码语言:javascript
运行
复制
{
  "rules": {
    ".read": true,
    "user": {
      ".indexOn": "displayname"
    },
    "room": {
      "$roomID": {
        "ingame":{
            ".write": "data.parent().child('creatorUid').val() == auth.uid"
        }
      }
    }
  }
}

我如何调用创建一个新房间

代码语言:javascript
运行
复制
let user = firebase.auth().currentUser
dbRoomRef.push().then((room) => {
    room.set({
        creatorUid: user.uid,
            ingame: false,
        })
    }).catch(function(err) {
        console.log(err.message)
    }
)

错误消息(如预期):

FIREBASE WARNING: set at /room/-L572bnuRv0_vntko-Bd failed: permission_denied

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-12 03:58:23

错误消息显示,您正在尝试编写/room/-L572bnuRv0_vntko-Bd,并且没有在那里写入的权限。这是正确的,因为您的规则只允许写入/room/-L572bnuRv0_vntko-Bd/ingame

如果在创建房间时已经设置了creatorUid,则不必将其包含在写入语句中,只需:

代码语言:javascript
运行
复制
room.child("ingame").set(false);

如果您试图允许每个人创建一个新的房间(或写信给现有的房间),只要他们是所有者,您就需要将您的规则设置得更高一级:

代码语言:javascript
运行
复制
"room": {
  "$roomID": {
    ".write": "newData.child('creatorUid').val() == auth.uid"
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48739232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档