2016-06-04 1 views
2

Ich möchte nur den Benutzer in der Lage sein, die Gruppe zu laden, wenn sie die Gruppe in ihrer Liste haben, wie würde ich eine Regel dafür schreiben?Kann ich eine Regel in Firebase erstellen, die einen Wert in einem push() -Array abfragt?

Oder gibt es eine Möglichkeit, eine Regel zu schreiben, um nach einem Wert in einem Firebase Push-Array zu suchen?

Database Schema

Zum Beispiel würde Ich mag eine Regel schreiben, um vielleicht so aussehen. Diese Regel ist nicht gültig, sondern zielt darauf ab, meinen Standpunkt damit zu erklären.

"groups":{ 
    "$group_id":{ 
    ".read":"root.child('users').child(auth.uid).child('groups').hasChildValue().val() == $group_id" 
    } 
}, 

Ich möchte nur die Benutzer in der Lage sein, um die Gruppe zu laden, wenn sie die Gruppe in ihrer Liste haben, wie würde ich eine Regel für das schreiben?


Update, wie ich es behoben habe. - Umstrukturierung der Daten, um flach zu sein. Mit push() loswerden, um Werte hinzuzufügen. - Flache Daten machten es einfach, die Schlüssel zu referenzieren.

Fixed Structure

"groups":{ 
     // root/users/auth.uid/groups/$group_id 
     "$group_id":{ 
      // only read if the user has the group_id 
      ".read":"root.child('users').child(auth.uid).child('groups').child($group_id).exists()", 
      // only write if logged in and it's new || if the user has group id 
      ".write":"(auth != null && !data.exists() && newData.exists()) || root.child('users').child(auth.uid).child('groups').child($group_id).exists()" 
     } 
    }, 
+0

".read": "root.child ('Benutzer'). Child (auth.uid) .child ('Gruppen'). HasChild ($ group_id)", - dies funktioniert, wenn die group_id die Push-Funktion auto_id ist. aber bringt mich nicht, was ich will. – Branflake2267

+0

Vielleicht könnte die .forEach funktionieren. Ich bin nicht sicher, was der Rückgabewert von forEach ist, wenn Sie in der Funktion false zurückgeben. Andernfalls möchten Sie möglicherweise Ihr Modell ändern. Ich denke, dass Ihre Daten so aussehen: https://www.firebase.com/docs/web/guide/structuring-data.html#section-indices – meriouma

+0

Es gibt kein .forEach für Regeln verfügbar, es sei denn, ich vermisse etwas. Ich versuche, eine weitere Beziehung hinzuzufügen, damit ich sie bidirektional machen kann, damit ich sie referenzieren kann, ohne das Push-Array bohren zu müssen. – Branflake2267

Antwort

1

Es scheint fast wie Sie die Gruppendaten zu ‚Filter‘ versuchen, die nicht das, was die Regeln Firebase ist sind. Siehe Link als Referenz:
https://firebase.google.com/docs/database/security/securing-data#rules_are_not_filters

Für das, was es klingt wie Sie versuchen zu erreichen (beschränken Lesezugriff auf Gruppen) Sie Ihr Datenmodell auf die Art und Weise anpassen müssen, um Ihre Anwendung sie zugreifen muss. Lassen Sie mich wissen, wenn Sie das suchen und ich meine Antwort aktualisieren kann.

+0

Ja, ich möchte eine Abfrage anwenden. Umstrukturierung hat den Trick gemacht. – Branflake2267

+0

Ich bin froh, dass Sie es geschafft haben, @ Branflake2267 zu arbeiten – neojato