Firebase规则:此规则之间有差异

时间:2018-10-21 02:47:50

标签: firebase firebase-realtime-database firebase-authentication firebase-security-rules

这种类型的规则有什么区别?它看起来像一样,但是我真的没有。

"rules": {
  "Users": {
    ".read": true,
    ".write": "auth !== null && data.child('uid').val() === auth.uid",
  }
}

VS

"rules": {
  "Users": {
    "$uid": {
      ".read": true,
      ".write": "auth !== null && data.child('uid').val() === auth.uid",
    }
  }
}

1 个答案:

答案 0 :(得分:0)

在第一个规则集中,用户可以读取整个/Users节点(如果它们已通过身份验证),并且该/Users节点包含带有其值的uid属性。

在第二个规则集中,用户只能在相同的条件下读取/Users的特定子节点。 $变量在第二个规则集中充当通配符:/Users/$uid下的规则适用于每个特定的用户节点。

假设您有一个节点/Users,如下所示:

Users: {
  uid1: {
    name: "user 1",
    uid: "uid1"
  },
  uid2: {
    name: "user 2",
    uid: "uid2"
  },
  uid3: {
    name: "user 3",
    uid: "uid3"
  }
}

使用第二个规则集,用户uid1只能读取自己的节点/Users/uid1。如果他们尝试阅读/Users,他们将得到Permission denied。因此,他们无法获得所有用户的列表。

现在让我们对JSON进行微小的更改,添加/Users/uid

Users: {
  uid: "uid1",
  uid1: {
    name: "user 1",
    uid: "uid1"
  },
  uid2: {
    name: "user 2",
    uid: "uid2"
  },
  uid3: {
    name: "user 3",
    uid: "uid3"
  }
}

现在有了第一个规则集,只有uid1可以读取/Users。这样做将为他们提供自己的数据,以及其他所有用户的数据。