【问题标题】:Firebase Rules: Different between this rulesFirebase 规则:此规则之间的差异
【发布时间】:2018-10-21 02:47:49
【问题描述】:

这类规则有什么不同?看起来一样,但我真的没看懂。

"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",
    }
  }
}

【问题讨论】:

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


    【解决方案1】:

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

    在第二个规则集中,在相同条件下,用户只能读取/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。这样做会给他们自己的数据,但也会给每个其他用户的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 2018-06-06
      • 2016-01-14
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多