我在firebase数据库中有一个名为“ Discussions”的表,它显示了用户创建的一些帖子。
我想在数据库级别创建一个规则,因此如果删除了用户帐户,它将不会显示帖子。
一个示例节点如下所示:
"Discussions" : {
"36" : {
"-Ldjrrzfo5K94KT2tjBM" : {
"content" : "text",
"from" : "lOkhKOJBNEZuvXt2Zgzz5tUr4ft2",
"time" : 1556655079442
}
我为此尝试了以下规则:
"Discussions" : {
"$lan_id": {
".write": "auth != null",
"$node_id" : {
".read": "root.child('Users').child(root.child('Discussions').child($lan_id).child($node_id).child('from').val()).child('deleted').val() != true",
".validate": "newData.child('time').isNumber() && newData.child('from').isString() && newData.child('content').isString()"
}
}
}
这是一个删除用户的示例:
"Users" : {
"lOkhKOJBNEZuvXt2Zgzz5tUr4ft2" : {
"aboutme" : "AAADEFAULT",
"birthdate" : "01.01.1970",
"city" : "Deleted",
"deleted" : true,
"image" : "default",
"name" : "Deleted Account",
"online" : 0,
"register_date" : 0,
"sex" : 1,
"thumb_image" : "default",
"whyhere" : "AAADEFAULT"
}
但是那是行不通的,因为如果我将“ read”规则放在“ $ node_id”中,即使我这样直接设置也不会显示任何记录:
"$node_id" : {
".read": true
}
但是我也需要访问“ $ node_id”才能完成我想做的事情。
有什么办法可以创建这样的规则?
答案 0 :(得分:0)
其中存在一些语法错误。
$lan_id
的值传递给child()
,应不用引号引起来。如果您写child('$lan_id')
,则'$lan_id'
只是一个字符串。要在路径中传递捕获的$lan_id
段的值,您需要child($lan_id)
。child(root.child('Discussions')...
的那段时间看起来很奇怪。我无法说出它是否正确,因为您显示的JSON不包含规则检查的deleted
属性,但这看起来很不正常。我希望有更接近的结果:
"root.child('Users').child('Discussions').child($lan_id).child($node_id).child('from').child('deleted').val() !== true"
请注意,您还可以使用parent()
来遍历树,因此类似的操作也可能起作用:
"data.parent().child('from/deleted').val() !== true"
如果您在规则的$node_id
级别拥有此规则,则对parent()
的调用将使您达到$lan_id