如何制作子节点的某些值' .read':true,而其他值' .read':false?

时间:2017-09-30 13:56:14

标签: javascript firebase

我有一个数据库,其中有一个名为' 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)

1 个答案:

答案 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。