2017-12-30 30 views
0

Ich arbeite daran, meine Anwendung in eine Cloud-basierte Datenbank zu verschieben. Momentan habe ich alles auf dem Gerät des Benutzers in sqllite gespeichert.Benutzerzugriffsverwaltung in Firebase Firestore

Sobald die Daten in die Cloud hochgeladen, ich möchte meinen Benutzern ermöglichen, Zugriff auf ihre persönliche Datenbank an eine andere Person zu geben, um zwischen den beiden Benutzern zu synchronisieren.

Use Case:

Person 1 ein Konto einrichtet und beginnt, Daten zu speichern. Person 1 möchte Person 2 Zugriff auf ihr Konto geben. Person 2 meldet sich an und die Anwendung bestimmt, dass Person 2 Zugriff auf das Repo von Person 1 hat und die beiden Clientanwendungen mit den gleichen Firestore-Sammlungen synchronisiert werden, als wären sie bei demselben Konto angemeldet.

Was ist der beste Weg, dies zu strukturieren? Es wäre einfach genug, sekundären Benutzern den Zugriff auf persönliche Dokumente einer Person zu erlauben, aber wie mache ich das so, dass meine Client-Anwendung leicht feststellen kann, auf welche Dokumente der sekundäre Benutzer Zugriff hat? Soll ich eine andere Sammlung von Benutzerzugriffskarten verwalten? Wie soll ich das strukturieren?

Antwort

0

Nun ist der einfachste Weg, den ich zur Zeit denken kann, beteiligt die Admin SDK von Firebase auf Ihrem eigenen Server individuelle Ansprüche an den Zielbenutzer zu gewähren, die den Zugang zu dem genannten Knoten bekommen sollte.

sagen Lassen

UID1 = Benutzer, der Zugriff

UID2 = Benutzer, der die Gewährung Sie nur eine Idee für den Zugriff erhalten gewähren will über i jemand anderes Knoten

Hier geben die Schreib Regeln Sie die lesen Öffentlichkeit haben können oder die gleiche oder wie Sie

wie

kann also sein, die Regeln für UID1 Knoten als (Ihre Struktur wie Ihre Bedürfnisse werden kann, ist dies ein Beispiel):

match /users/{UID1}/{allPaths=**}{ 

    allow write: if request.auth.uid == UID1 || request.auth.token.allowedAccesToId == UID1 

} 

Dies ist somit eine Kombination aus der Standard-Benutzerbasierte Regel und eine benutzerdefinierten Anspruch Regel

Hier allowedAccesToId ein benutzerdefinierter Anspruch über das Admin sdk (JAVA) wie folgt hinzugefügt: Sie

Map<String, Object> claims = new HashMap<>(); 
claims.put("allowedAccesToId", UID1); 
FirebaseAuth.getInstance().setCustomUserClaimsAsync(UID2, claims).get(); 

kann sehen, wie es in anderen Server-Seite Sprachen tun hier

https://firebase.google.com/docs/auth/admin/custom-claims

Jetzt wird dies gewähren Sie dem Benutzer UID2 für eine Standarddauer von 1 Stunde Zugriff, denken Sie nicht, dass Sie die Dauer für das benutzerdefinierte Token länger anpassen können.

Sobald der Benutzer es zu widerrufen will, stellen Sie den benutzerdefinierten Anspruch Wert von allowedAccesToId bis zu einem gewissen Zufallswert sagt xx, die nie einen Knoten übereinstimmen. Auf diese Weise kann der UID2-Benutzer nicht mehr auf den Knoten von Benutzer1 zugreifen

Verwandte Themen