2017-10-10 1 views
7

Ich versuche derzeit, kleine App auf Firebase als eine Bewertung davon zu bauen. Es sieht interessant und super produktiv aus, aber ich habe ein Problem mit den Regeln der Feuerwache.Firestore lesen Regeln mit Selbstbedingung

Ich habe eine Sammlung (Spiele) mit Objekten wie folgt aussehen:

{ 
    "name":String, 
    "description":String, 
    "owners": 
    { 
     "uid": String 
     "uid2": String 
    } 
} 

Und Regeln, wie diese ein:

service cloud.firestore { 
    match /databases/{database}/documents { 
     match /games { 
      match /{game} { 
       allow write: if request.auth != null && request.resource.data.owners[request.auth.uid] == 'ADMIN'; 
       allow update: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN'; 
       allow read: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN'; 
      } 
     } 
    } 
} 

Während Schreib, Update funktionieren. Lesen funktioniert nur für einzelne Dokumente. Wenn ich versuche, eine Sammlung zu lesen, erhalte ich Zugriffsfehler, als hätte der Benutzer kein Recht darauf. Der Teil, der es nicht macht, ist

resource.data.owners[request.auth.uid] == 'ADMIN'. 

eine Abfrage where("owners."+auth.uid,"==", 'ADMIN') zur Sammlung Hinzufügen entweder nicht hilft.

Was mache ich hier falsch? Gibt es einen empfohlenen Ansatz in Firebase Firestore für ähnliche Szenarien?

EDIT: Ich habe versucht, 'get' und 'Liste' Regeln wie folgt ergänzt:

allow list: if request.auth != null;

allow get: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';

Es ist nicht wie erwartet funktioniert. Ich erwartete, dass es mir erlaubt, Dokumente mit where aufzulisten, aber wenn es ein Dokument gibt, das ich nicht get konnte, erwartete ich, "fehlende oder unzulängliche Berechtigungen" zu erhalten. Was ich tun konnte, war ALLE Dokumente aufzulisten, aber einige davon nicht direkt zu lesen (get Regel funktioniert, wenn versucht wird, einzelne Dokumente abzurufen, aber nicht, wenn sie aus einer Sammlung aufgelistet werden).

EDIT 2: Sieht aus wie nach @MikeMcDonald meine Erwartung war richtig, aber es ist derzeit abgehört. Warten auf die Reparatur.

EDIT 3: Es arbeitet jetzt gut mit Regeln auf diese Weise eingestellt zu bekommen und Liste:

allow get, list: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';

+1

Beachten Sie, dass 'write' eine Obermenge von' update' ist, also überschreibt Ihre aktuelle 'write' Regel das' update'. Ändern Sie es in 'create' und Sie werden Ihrem beabsichtigten Ziel ein wenig näher kommen. –

+0

@MikeMcDonald danke, ich werde das tun. Ich fand auch (nachdem ich etwas näher gelesen habe), dass es zwei "Reads" gibt. 'Get' und' List' später werde ich versuchen, eine breitere Liste zu ermöglichen, dass es etwas, was ich brauche. Vielen Dank! – Monku

+1

'read' ist der Schirm, der' get' und 'list' enthält. Ich habe bestätigt, dass das obige ein Fehler ist - es sollte funktionieren, aber wir behandeln Array-Mitglieder hier nicht richtig. Ich werde hier weitermachen, sobald der Fehler behoben ist. –

Antwort

0

Ich denke, erstellen und zu aktualisieren funktioniert, weil sie einen Teil von Schreib- und Zustand 1 deckt sind.

Verwandte Themen