2013-12-15 14 views
5

Die Beispiele in den Firebase-Dokumenten setzen eine manuelle Aktualisierung der Firebase-Sicherheitsregeln voraus. Wie können Sicherheitsregeln programmgesteuert geändert werden, um echte kollaborative Anwendungen zu unterstützen? In dem Anwendungsfall, den ich in Betracht ziehe, besteht die Anforderung darin, dass ein Benutzer in der Lage ist, andere Benutzer zur Zusammenarbeit/Freigabe ausgewählter Daten einzuladen und den Zutritt zu den Mitarbeitern gewähren/entziehen zu können. Wie kann dies mit Firebase erreicht werden?Wie programmgesteuert Sicherheitsregeln in Firebase ändern?

Antwort

8

Sie sollten Ihre Sicherheitsregeln nicht programmatisch ändern. Sie sollten sie als Code betrachten und sie nur zur Bereitstellungszeit ändern.

Wenn Sie versuchen zu ändern, was Benutzer tatsächlich tun dürfen, sollten Sie dies tun, indem Sie Sicherheitsregeln schreiben, die von Daten in Ihrem Firebase abhängen.

Angenommen, Sie möchten den Zugriff auf ein Datenelement auf Benutzer in einer bestimmten Gruppe beschränken. Anstatt die Sicherheitsregeln jedes Mal zu ändern, wenn sich die Gruppenmitgliedschaft ändert, speichern Sie die Gruppe einfach in Firebase und lassen Ihre Sicherheitsregeln prüfen, ob der aktuelle Benutzer in dieser Gruppe ist, bevor Sie den Zugriff erlauben.

Auf diese Weise wird den Benutzern bei jeder Änderung der Gruppenmitgliedschaft automatisch Zugriff auf die Daten gewährt, die sie sehen dürfen.

Ein komplexeres Beispiel für Sicherheitsregeln finden Sie in der Datei rules.json in Firefeed.

+1

danke für die schnelle antwort. Die Verwendung von Gruppen zur Handhabung dynamisch aktualisierter Benutzer ist sinnvoll. Aber wie würden dynamisch hinzugefügte Datensätze behandelt? Ein Benutzer kann beispielsweise ein Projekt unter/users/userid/projects/projectid erstellen und dann einer Gruppe von Mitarbeitern den Lesezugriff für dieses spezifische Projekt gewähren. Wie wäre das mit Firebase? – Jarnal

+1

Die Gruppeneinstellung war nur ein Beispiel. Sie müssen keine Gruppen haben - Sie können davon abhängig sein, welche Daten Sie mögen. Zum Beispiel könnte das Dataset selbst ein "lesbares" Flag haben, das, wenn es auf "True" gesetzt ist, es jedem erlaubt, es zu lesen. Oder es könnte eine "lesbare" Liste von Benutzern haben, die es benutzen dürfen. Etc ... –

+1

@AndrewLee, ich habe einen komplexeren Fall: Ich erstelle Räume (Zweige) dynamisch und ich möchte jeden Raum auf nur X spezifische Kollaborateure beschränken und jeden anderen davon abhalten, dort zu schreiben. Wie kann ich diese Zugriffsrechte bei der Zimmererstellung angeben? Beachten Sie, dass es Millionen verschiedener Räume geben kann. –

0

Aber wie würden dynamisch hinzugefügte Datensätze behandelt?

Sie würden dies tun, indem Sie den untergeordneten Knoten $ verwenden. Es sieht etwa so aus:

Hier meine Datenbank ist

users 
- userIDHere 
    - name: John Doe 
    - whatever: who knows 

Und Sie würden dies auf jeden Benutzer festgelegten Regeln, indem Sie:

{ 
    "rules": { 
    "users": { 
     "$user": { 
     // whatever rules you want here, and you can reference $user to get the user's id. 
     } 
    } 
    } 
} 

Hoffnung ist das, was Sie fragen, und die Hoffnung das hilft!

Verwandte Themen