Firebase规则:将其中一个字段设为私有,同时允许读取其余字段

时间:2017-12-12 16:12:08

标签: firebase firebase-realtime-database

我的firebase数据库中有以下结构:

{
    rooms: {
        roomId$: {
            users: {...},
            name: "Room Name",
            password: "abc123",
            owner: "ownerId"
        }
    }
}

我想允许读取除密码以外的每个字段。 所以,我创建了以下规则:

"rooms": {
  "$roomId": {
    "name": {
      ".read": "true"
    },
    "users": {
      ".read": "true"
    },
    "owner": {
      ".read": "true"
    },
    "password": {
      ".read": "data.parent().child('owner').val() === auth.uid",
      ".write": "data.parent().child('owner').val() === auth.uid"
    }
  }
}

问题是 - 是否可以在$roomId级别同时阅读所有房间信息,同时隐藏password字段?或者单独嵌套公共和私人领域是唯一的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以将房间的私人数据移动到另一个"分支"在JSON树中,类似这样:

{
    rooms: {
        roomId$: {
            users: {...},
            name: "Room Name",
            owner: "ownerId"
        }
    }
    roomsprivateinfo: {
        roomId$: {
            owner: "ownerId",
            password: "abc123"
        }
    }
}

这种方法可让您为"房间"写一条规则。允许公共访问的分支,然后为" roomsprivateinfo"写一个单独的规则。限制访问的分支。所有者存储在两个树中,以使规则更容易编写。

每次添加包含房间信息的新字段时,此方法也不要求您编写新规则。