只有子级。编写规则[Firebase]
鉴于以下规则:只有子级。编写规则[Firebase],firebase,Firebase,鉴于以下规则: { "rules": { "users": { "$uid": { "name":{ ".read": "auth != null && auth.uid == $uid", ".write": "auth != null && auth.uid == $uid" }
{
"rules": {
"users": {
"$uid": {
"name":{
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
}
}
}
}
Firebase中是否有方法限制可以写入对象的子对象
例如,我想限制客户端仅使用一个属性编写此对象:
name {
"value": "value"
}
我知道有.validate
和haschilds()
但是这并不妨碍用户合法地在$uid下写入具有不需要的属性的对象
没有任何内容阻止客户端按如下方式写入对象:
name {
"value":"value",
"unwantedAttribute":"wastingSpace"
}
是否有一个等价于hasshosechildrenonly()?一个
。write
规则决定了谁可以将数据写入一个位置,而不是他们可以写入什么数据
要确定写入的数据的结构,需要一个.validate
规则。在这种情况下,您可以说需要一个名称
,它必须是一个包含以下内容的字符串:
{
".validate": "newData.hasChild('name')",
"name": {
".validate": "newData.isString()"
},
"$other": {
".validate": false
}
}
顶层的验证确保新数据必须始终具有名称
属性。如果没有此选项,您可以删除名称
,因为删除数据不会触发验证
第二次验证确保name
是一个字符串
第三次验证确保除
名称
之外的任何子项都将被拒绝。写入规则决定了谁可以将数据写入某个位置,而不是他们可以写入什么数据
要确定写入的数据的结构,需要一个.validate
规则。在这种情况下,您可以说需要一个名称
,它必须是一个包含以下内容的字符串:
{
".validate": "newData.hasChild('name')",
"name": {
".validate": "newData.isString()"
},
"$other": {
".validate": false
}
}
顶层的验证确保新数据必须始终具有名称
属性。如果没有此选项,您可以删除名称
,因为删除数据不会触发验证
第二次验证确保name
是一个字符串
第三次验证确保除了名字以外的任何孩子都会被拒绝。@Frank van Puffelen的回答确实很有帮助,但我想指出一件事 从 规则是以原子的方式应用的。这意味着,如果某个位置或父位置没有授予访问权限的规则,则读或写操作会立即失败。即使每个受影响的子路径都是可访问的,在父位置的读取也将完全失败
因此,最好在您的父节点上声明
、读取和、写入权限。@Frank van Puffelen的回答非常有用,但我想指出一点
从
规则是以原子的方式应用的。这意味着,如果某个位置或父位置没有授予访问权限的规则,则读或写操作会立即失败。即使每个受影响的子路径都是可访问的,在父位置的读取也将完全失败
因此,最好在父节点上声明.read
和.write
权限