Ich habe ein Problem mit Firebase-Regeln. Im Grunde habe ich ein Stammordner ‚Benutzer‘, enthält viele usersIDs genannt, die wiederum Daten enthält, genau wie folgt aus:Die Firebase-Sicherheitsregeln funktionieren nicht
users {
userid1 {
info_user {
a: {
a1: whatever
a2: whatever
a3: {
a3.1: whatever
a3.2: whatever
a3.3: whatever
a3.n: whatever
}
}
n: {} ...
}
},
userid2 {}, ...n
}
Alles gut funktionieren, wenn Sie den folgenden Code ausgeführt wird, wenn es keine Sicherheitsregeln ist, wie:
{rules {".read" : true, ".write" : true}}
function getUserInfo() {
var dbRef = firebase.database();
var myArray = [];
dbRef.ref('users').on('child_added', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
myArray = (childSnapshot.val().a3);
// do something
});
});
}
Meine Herausforderung ist die Sicherheitsregeln zu ändern, ohne die Datenbankstruktur zu ändern.
Also habe ich versucht, so etwas zu tun:
{
"rules" : {
".read" : false,
".write" : false,
"users": {
"$userid": {
"info_user": {
"a":{
".read": "auth != null",
".write": "(root.child('r').child('w').hasChild(auth.uid))",
"a1":{".validate": "newData.isString()"},
"a2":{".validate": "newData.isString()"},
"a3":{".validate": "newData.isString()"}
},
"n": {
".read": "auth != null",
".write": "$user_id === auth.uid"
}
}
}
}
}
}
Das erwartete Ergebnis ist ein Knoten a3 zu lesen, wenn der Benutzer authentifiziert ist.
Wie geht das?