"peopleWhoLike" : {
".write": "data.parent().parent().child('domain').val() == newData.child('domain').val()"
}
下面是JSON结构。我想确定它是在检查用户写作的域=他写作的用户的域。为了便于理解JSON结构,我在3个位置用粗体做了一个例子**。
IrrBgFY9C1ekMmHUkQRzc5LhbDu1
是想要写入的用户。他想点赞并给用户uid写信。作为检查,要比较用户uid和IrrBgFY9C1ekMmHUkQRzc5LhbDu1
的域。我问题第一行的规则是这样做的,还是只适用于不同的数据库结构?
"people" : {
“user uid” : {
“**Domain** : "aol.com",
"peopleWhoLike: {
"-M-vZavBdcpX3SzkvgKN" : "**IrrBgFY9C1ekMmHUkQRzc5LhbDu1**", ////this is autokey: uid of the likeR///
}
}
“user uid1///IrrBgFY9C1ekMmHUkQRzc5LhbDu1” : {
“**Domain** : "aol.com",
"peopleWhoLike: {
"-M-htrhrthrdyhrf" : "tydBgFY9C1ekMmHUkQRzc5LhbDu1",
}
}
“user uid2” : {
“Domain : "yahoo.com",
"peopleWhoLike: {
"-M-gdgertghd" : "gertgerdgherdhedebe",
}
}
}
应答后更新
代码定义了喜欢这样的人:
let updateLikes: [String: Any] = ["peopleWhoLike/(keyToPost)" : Auth.auth().currentUser!.uid]
ref.child("people").child(self.postID).updateChildValues(updateLikes, withCompletionBlock: { (error, reff) –
这个例子有很多问题。我会在下面指出那些跳出来的:
-
这些规则
"peopleWhoLike" : { ".write": "data.parent().parent().child('domain').val() == newData.child('domain').val()" }
这些现在适用于整个
peopleWhoLike
,在那里你似乎想将它们应用于下面的每个类似节点,这将是:"peopleWhoLike" : { "$liker": ".write": "data.parent().parent().child('domain').val() == newData.child('domain').val()" } }
-
规则检查中的
newData.child('domain').val()
指的是liker下不存在的domain
节点。我的猜测是,你试图从他们的用户档案中查找喜欢的人的数据,这需要data.parent().parent().parent().child(newData.val()).child('domain').val()
之类的东西。 -
为什么在
peopleWhoLike
下使用按键?如果每个用户只能点赞另一个用户一次(这是最常见的点赞实现(,则习惯使用点赞者的UID作为其节点的密钥:"people": { "user uid": { "Domain": "aol.com", "peopleWhoLike": { "IrrBgFY9C1ekMmHUkQRzc5LhbDu1": true } } }
有了这种结构,你就可以自动保证每个用户只能点赞一次,这让查找点赞变得更简单了。