我有一个数据库,其中有一个名为' details'的节点,它有一些数值子节点。每个子节点都存储名称,年龄,性别等详细信息。我需要使名称对所有人可见,并且年龄,性别不可见。请帮我解决Firebase规则和JavaScript代码。
我已经按照以下规定执行了规则
{
"rules": {
"register" : {
"details": {
".read": false,
".write": true,
"$userid": {
"name": {
".read": true
},
"age": {
".read": false
},
"gender": {
".read": false
}
}
}
}
}
}
我的数据库看起来像这样
mainblock
register
details
1
name: "ALPHA"
age: "10"
gender: "Male"
18
name: "BETA"
age: "15"
gender: "Female"
19
name: "GAMMA"
age: "18"
gender: "Male"
使用的JavaScript代码是
var query = firebase.database().ref("register/details/").orderByKey();
query.once("value").then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var nm = childSnapshot.child("name").val();
console.log(nm)
});
});
但我说错误
Uncaught (in promise) Error: permission_denied at /register/details: Client doesn't have permission to access the desired data.
at H (firebase-storage.js:3476)
at onComplete (firebase-storage.js:3476)
at Object.onComplete (firebase-storage.js:3476)
at firebase-storage.js:3476
at e.vr (firebase-storage.js:3476)
at t.vr (firebase-storage.js:3476)
at t.cr (firebase-storage.js:3476)
at e.onMessage (firebase-storage.js:3476)
at e.nt (firebase-storage.js:3476)
at e.handleIncomingFrame (firebase-storage.js:3476)
答案 0 :(得分:1)
您必须删除第一个读取语句。由于"cascade in such a way that granting a read or write privilege to a parent node always grants that read/write access to all child nodes",在尝试访问数据库时仅考虑了第一个sudo apt-get install python-mysql.connector
规则。同样适用于import mysql.connector
,只有".read"
不会级联,因此树中的所有验证规则都必须适用于允许写入。
更多关于here。
".write"
其他".validate"
语句是不必要的,因为默认情况下/未设置时权限为false。