如何使用Firebase规则对所有节点进行读/写访问?

时间:2015-06-13 03:08:52

标签: firebase rules

默认设置提供完全访问权限:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

为了测试我对Firebase指南和文档中的规则编写的理解,我(现在正在撤退)尝试通过为4个父节点编写规则来实现相同的结果。

如果它有所不同,前两个节点只有值,没有子节点。 ** Sidequest:他们仍称为节点吗?

以下规则导致与上述规则更改为false读取和写入时相同的行为。

    {
  "rules": {
    "myNode1": { 
      ".read" : true,
      ".write" : true
    },
    "myNode2" : {
      ".read" : true,
      ".write" : true
    },
    "myNode3" : {
      ".read" : true,
      ".write" : true
    },
    "myNode4" : {
      ".read" : true,
      ".write" : true
    }
  }
}

我的规则有什么问题?

更新/背景:

我有一个停止在这里运行的authDataCallback(在if (authData) {子句中):

var ref = new Firebase("https://<my>.firebaseio.com")

ref.once("value", function(snapshot){ 

发现如果我将ref var更改为更具体的内容:var ref = new Firebase("https://<my>.firebaseio.com/myNode1"),则authDataCallback将完整运行。

肯定没有必要制作整个数据库的快照;这是获取我需要的数据的一种混乱方式。我已经更新了,但考虑到我对整个数据库进行了读写操作,我仍然对为什么规则阻止回调感到困惑。

1 个答案:

答案 0 :(得分:3)

我认为这是基于所提供信息的答案:

您发布的两套规则不同。第一集

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

允许每个人对

中的firebase中的每个节点(包括父节点)进行读写访问
https://<my>.firebaseio.com

第二组规则允许每个人访问firebase引用中的特定节点,但阻止访问所有其他节点,包括访问父节点。在更新中,代码尝试读取没有为其定义规则的父节点,因此默认情况下读取和写入都是false。

所以说你有以下结构:

https://whirlygig.firebaseio.com

Whirlygig
  someRandomData: "3.141"
  otherRandomData: "6.02"
  myNode1
    firstName: "first"
    lastName: "last"
  myNode2
    first: "first"
    last: "last"

使用第一组规则,每个人都可以访问someRandomData以及myNode1,myNode2等。

使用第二组规则,每个人只能访问myNode1和myNode2,但无法访问someRandomData