2016-07-12 10 views
3

Ich kann nicht herausfinden, warum Firebase mich nicht diesen spezifischen schreiben lassen wird. Ich fühle mich wie ich es im Simulator gleich mache und es funktioniert dort. Im Folgenden finden Sie meine Sicherheitsregeln für diesen Abschnitt.Firebase Schreibberechtigung verweigert

"joinRequests" : { 
    "$clanid": { 
    "$requesterid" : { 
     ".read" : "$requesterid === auth.uid || root.child('clans/' + $clanid + '/members/' + auth.uid + '/admin').val() === true", 
     ".validate": "newData.hasChildren(['request'])", 
     "request" : { 
     ".write" : "true", 
     ".validate": "newData.hasChildren(['name', 'message'])", 
     "name" : { 
     ".validate": "newData.isString()" 
     }, 
     "message" : { 
      ".validate": "newData.isString()" 
     }, 
     "$other": { 
     ".validate": false 
     } 
     }, 
     "approved" : { 
     ".write" : "root.child('clans/' + $clanid + '/members/' + auth.uid + '/admin').val() === true || ($requesterid === auth.uid && !newData.exists())", 
     ".validate": "newData.isBoolean()" 
     }, 
     "$other": { 
     ".validate": false 
     } 
    } 
    } 
}, 

Im Code für mein Android App betreibe ich diese beiden Zeilen:

dataSnapshot.child("request").getRef().removeValue(); 
dataSnapshot.child("approved").getRef().removeValue(); 

Was ich komisch finde ist, dass es mir erlaubt, die „genehmigt“ Wert zu entfernen, aber nicht die „Anfrage“ Wert . Der dataSnapshot ist eine $ requesterid. Wenn ich diese Zeile im Simulator laufen und es erlaubt den Schreib:

/joinRequests/QV28VJYG/c1cef959-2dd3-4cab-8649-2b81892cffa6/request 

Der Fehler, den ich in Android Studio bekommen, ist dies:

W/RepoOperation: setValue at /joinRequests/QV28VJYG/qRlJt4UIAcRVIe9VXoYVBa68tO43/request failed: DatabaseError: Permission denied 

Es muss etwas dumm, dass ich tue, aber ich kann mir nicht vorstellen was es sein würde. Jede Hilfe wäre großartig, Danke.

+0

Können Sie es ohne diese Validierungsregel in der Anfrage versuchen: ".validate": "newData.hasChildren (['name', 'message'])",? –

+0

So stellte sich heraus, dass das Problem mit dieser Zeile ".validate" war: "newData.hasChildren (['request'])" wegen meiner Anforderungen konnte ich nicht die Erlaubnis schreiben auf $ requesterid setzen, also versuchte ich gerade lösche die Kinder und es war diese Regel im Elternteil, die es nicht erlaubte. Seltsam, dass der Simulator es nicht verstehen würde. – Matt

+0

Wooooops. Es sieht so aus, als ob die Benutzeroberfläche des Simulators sortierte Zeilennachrichten erwartet und einige Zeilen nicht hervorhebt, wenn die API ein unsortiertes Array von Zeilennachrichten zurückgibt. Ich werde es reparieren. Danke für den Bericht! – tstirrat

Antwort

0

newData ist ein Snapshot, der darstellt, wie Daten nach dem Vorgang aussehen werden.

newData.hasChildren(['request']) teilt Firebase mit, um sicherzustellen, dass der Knoten request existiert, nachdem der Vorgang ausgeführt wurde. Daher ist das Löschen dieses Knotens verboten.

Verwandte Themen