如何在Firebase中设置“主键”?

时间:2015-10-13 04:20:41

标签: firebase firebase-security

这是我计划在我的留言板应用程序中使用的架构,用户可以在其中创建自己的留言板:

{
    "boards" : {
        "jane-board" : {
            // meta information like who created this board
        },
        "john-board" : {
            // meta information like who created this board
        },
        ...
    },
    "jane-board" : {
        // data
    },
    "john-board" : {
        // data
    }
}  

确保"boards"不能包含两个"jane-board"的规则是什么?

我尝试编写规则但失败了:

{
    "rules" : {
        ".read" : true,
        "boards" : {
            ".write" : true,
            "$board_name" : {
                ".validate" : "!newData.parent().hasChild($board_name)"
            }
        }
    }
}  

1 个答案:

答案 0 :(得分:1)

由于您使用电路板的名称作为存储它的密钥,因此可以保证每个电路板名称最多只能存在一次。

并不完全清楚你想要完成的事情。但如果您试图阻止董事会的数据被覆盖,您可以通过以下方式实现这一目标:

{
    "rules" : {
        ".read" : true,
        "boards" : {
            "$board_name" : {
                ".write" : "!data.parent().hasChild($board_name)"
            }
        }
    }
}  

规则变更:

  • 我从".write": true删除了boards。根据该规则,每个人都可以阅读所有板,因为您cannot take permissions away on a lower level
  • 我将规则更改为".write"规则,因为它更像是阻止写入而不是验证结构
  • 我检查新电路板是否已存在于当前数据中。您正在检查newData,但这没有任何意义:新主板将始终存在于新数据中。