我想创建一个firebase规则,允许用户在子项的属性具有特定值时读取和写入子项。让我们说我的数据库看起来像这样:
"tasks": {
"SDkh7s62jnd23d9": {
"uid": "someuserid",
"other": "datagoes here"
}
}
这是我目前的安全规则:
"tasks": {
".indexOn": "_state",
"$registerQueueKey": {
".read": "data.child('uid').val() == auth.uid",
".write": "newData.child('uid').val() == auth.uid"
}
}
此规则限制用户写入权限,但它永远不会让用户阅读,即使他们尝试阅读的孩子的uid
属性等于auth.id
。
然后我测试了以下规则集:
"tasks": {
".indexOn": "_state",
"$registerQueueKey": {
".read": true,
".write": "newData.child('uid').val() == auth.uid"
}
}
尽管.read
权限设置为永久true
值,但用户仍然无法读取$registerQueueKey
孩子。
然后我测试了以下规则集:
"tasks": {
".indexOn": "_state",
".read": true,
"$registerQueueKey": {
".write": "newData.child('uid').val() == auth.uid"
}
}
现在我可以很好地阅读这个孩子了,所以我尝试了这个最终的安全规则:
"tasks": {
".indexOn": "_state",
".read": "data.child($registerQueueKey").child('uid').val() == auth.uid",
"$registerQueueKey": {
".write": "newData.child('uid').val() == auth.uid"
}
}
但是这条规则会引发错误,因为变量$registerQueueKey
在使用范围内未定义。
我如何完成这样的规则?
答案 0 :(得分:0)
我认为错误是因为您没有放置通配符:
"tasks": {
"$uid": {
".indexOn": "_state",
".read": "data.child($registerQueueKey").child('$uid').val() == auth.uid",
"$registerQueueKey": {
".write": "newData.child('$uid').val() == auth.uid"
}
}
}