我有一个家庭有成员的数据库。
家庭成员数据库。
// Family 1 has user 1, user 2, user 3.
// Family 2 has user 4, user 5.
// family_id_x is uniquely generated by firebase.
// uid is uniquely generated by firebase on registration. (auth.uid)
// database 'family-member'
'family-member':[
'family_id_1': 'uid_1',
'family_id_1': 'uid_2',
'family_id_1': 'uid_3'
'family_id_2': 'uid_4'
'family_id_2': 'uid_5'
]
家具数据库
// A family member can create furniture for the family.
// database 'furniture'
'furniture':[
'furniture_id_1': {
'furnitureName': "Mahogany Dining Table",
'familyKey': 'family_id_1'
}
]
所以我创建了一个数据库规则,以查看用户是否能够制作新家具。 我已经使用uid_1登录了。 然后我尝试了以下内容。
// database rule for furniture.
"furniture": {
".write": "auth != null && (root.child('family-member').child(
newData.child(familyKey).val() // Problem!
).child(auth.uid).exists())
}
这失败了。我怀疑下划线部分是原因。所以我硬编码。
"furniture": {
".write": "auth != null && (root.child('family-member').child(
'family_id_1' // HardCode! Now works.
).child(auth.uid).exists())
}
有效。
请告诉我应该怎么做以解决这个问题。
编辑:product =>家具,杂项语法错误
答案 0 :(得分:1)
如果我错了,请纠正我(我可能不完全明白你的要求,但这会有效):
"product": {
"$familyKey": {
".write": "auth != null && (root.child('family-member').child(
newData.child(familyKey).val() // Problem!
).child(auth.uid).exists())
}
}
这是指定一个变量(外卡),您可能希望进行==
类型的比较,例如您尝试获取的路径可能始终存在。
"root.child('family-member').child($familyKey).val() == family_id_1"
答案 1 :(得分:0)
这是一个简单的错字。
我需要在密钥周围加上引号
newData.child(familyKey).val() // Problem!
newData.child('familyKey').val() // Solution!
截止。