这种类型的规则有什么区别?它看起来像一样,但是我真的没有。
"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",
}
}
}
答案 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
。这样做将为他们提供自己的数据,以及其他所有用户的数据。