Ich habe eine Liste von Datensätzen in Firebase, die eine Gruppeneigenschaft mit null oder mehr Gruppen darauf haben wird. Ich habe auch das Firebase-Auth-Objekt, das auch keine oder mehrere Gruppen darauf haben wird. Ich möchte eine .read-Firebase-Regel für meine Datensätze einrichten, die überprüft, ob die beiden mindestens eine Gruppe haben, die in beiden Listen vorhanden ist.Wie fireBase-Regel zu überprüfen ist Benutzergruppe Array und Datensatzgruppe Array schneiden
Anders ausgedrückt: Ich habe einen Benutzer mit einem Array von Gruppen, die ihm zugewiesen wurden. Ich habe einige Datensätze, die auch eine Liste von Gruppen enthält, die angeben, welche Gruppen der Benutzer haben muss, um auf sie zuzugreifen. Wenn der angemeldete Benutzer versucht, auf den Datensatz zuzugreifen, möchte ich sicherstellen, dass der Benutzer über mindestens eine Gruppe verfügt, die der Datensatz benötigt.
Auf dem Client ich etwas tun würde, wie _.intersect(userGroups, recordGroups).length > 0
Ich bin nicht sicher, wie ich diese Regel Feuerbasis Ausdruck in einer tun. Es wäre cool, wenn es so etwas gäbe.
Record:
{
someData: "test"
groups: ['foo', 'bar']
}
Firebase Auth Objekt:
{
userName: "Bob",
groups: ['foo', 'bar']
}
Regel Daten:
{
"rules": {
"records": {
"$recordId": {
".read": "data.child('groups').intersectsWith(auth.groups)"
}
}
}
}
Dank.
Update: Ich denke, dass wenn hasChildren() verwendet || anstelle von & & könnte ich die Gruppennamen in die Schlüsselposition bringen und auf diese Weise auf ihre Existenz prüfen. So etwas wie "data.child('groups').hasChildren(auth.groups, 'or')"
Wo Record:
{
someData: "test"
groups: {
'foo': '',
'bar': ''
}
}
Update2: Basierend off Kato Kommentar & Link Mir ist klar, dass, selbst wenn hasChildren tun könnten, oder es würde immer noch nicht ganz richtig funktionieren. Anforderungen für einzelne Datensätze würden funktionieren, aber Anforderungen für alle Datensätze würden einen Fehler verursachen, wenn der aktuelle Benutzer nicht auf jeden Datensatz zugreifen konnte.
Es ist immer noch nicht klar, wie Sie Daten strukturieren würden, damit dies funktioniert. Wenn ein Datensatz zu vielen Gruppen gehören könnte, wie würde das funktionieren? Dies ist ein sehr häufiges Szenario (im Grunde, wie Linux-Gruppen-Berechtigungen arbeiten), so dass ich nicht der einzige sein kann, der das versucht. Hat jemand irgendwelche Ideen/Beispiele, wie das im Firebase zu erreichen ist?
Firebase-Sicherheitsregeln [kann nicht als Filter verwendet werden] (https://www.firebase.com/docs/security/guide/securing-data.html) # Abschnitt-Filter). Wahrscheinlich möchten Sie Ihre Datensätze nach Gruppe speichern, wenn sie auf diese Weise abgerufen werden sollen. – Kato
Nicht sicher, wie das funktionieren würde. Benutzer gehören zu vielen Gruppen und Datensätze gehören zu vielen Gruppen. Solange sie beide eine gemeinsame Gruppe haben, sollte Zugang gewährt werden. – yodaisgreen
Irgendein Update zu diesem? Ich habe ein ähnliches Problem [hier] (http://stackoverflow.com/questions/34078703/proper-firebase-security-rules-for-implementing-rbac) –