我的用户数据库如下:
root
users
453453452
name: user1
email: email@example.com
permissions: [1,2,3]
457575684
name: user2
email: email2@example.com
permissions: [1,2,3]
234235346
123245346
436286785
474574725
我想做的是允许写入/users
和用户节点/users/453453452
,但禁止删除users表或任何用户节点。
我尝试过的事情:
{
"rules": {
"users": {
".read": false,
".write": "newData.exists() && newData.val() != null",
"$user": {
".read": true,
".write": "newData.exists() && newData.val() != null",
}
}
}
}
如果我向/users/453453452.json
发送DELETE请求,我仍然可以删除任何节点。
请问能给我一些帮助吗?
编辑:
1-成功购买后将用户添加到数据库,其中userID
是用户的电子邮件地址的哈希值唯一标识符。
fetch(myAPI + "/" + userID + ".json", {
method: 'PUT',
headers: {'Accept': 'application/json, application/xml, text/plain, text/html, *.*',
'Content-Type': 'application/json; charset=utf-8'},
body: JSON.stringify({"name": userName,"email": userEmail, "order_id": orderID})
});
我可以轻松地使用POSTMAN向myAPI + "/" + userID + ".json"
发送DELETE请求以删除所选记录,这是我试图避免的,甚至可以向/users
发送空数组来擦除整个数据库。
答案 0 :(得分:0)
我无法重现问题here。我使用的完整代码是:
var url = "https://stackoverflow.firebaseio.com/61015647";
fetch(url+".json", {
method: 'POST', // *GET, POST, PUT, DELETE, etc.
headers: {
//'Content-Type': 'application/json'
'Content-Type': 'application/x-www-form-urlencoded',
},
body: JSON.stringify(Date.now())
}).then(function(response) {
return response.json()
}).then(function(json) {
console.log("Child "+json.name+" added, trying to delete with POST...");
return fetch(url+"/"+json.name+".json", {
method: "DELETE"
})
}).then(function(response) {
return response.json()
}).then(function(json) {
console.log(json);
}).catch(function(error) {
console.error(error);
});
以及相关规则:
{
"rules": {
"61015647": {
".read": true,
"$child": {
".write": "newData.exists() && newData.val() != null"
}
}
}
}
运行此代码时,输出为:
null(on(“值”侦听器中的初始值)
“添加了子-M44hzNISkQNvycyH63B,试图通过POST删除...”
[对象对象] { 错误:“权限被拒绝” }
[object Object] {(on(“ value”侦听器中的下一个值) -M44hzNISkQNvycyH63B:1586012616166 }