2017-10-23 3 views
5

Ich habe eine Sammlung. Jedes Dokument hat einen Objektleser, der die Benutzer von Personen speichert, die Zugriff auf die Dokumente haben. Es könnte ein oder mehrere Benutzer sein, die ein Dokument enter image description hereFirestore Regeln Karte für Objekt

Feuerbasis Winkel meine Seite zeigen zugreifen kann

constructor(private afAuth: AngularFireAuth, private afs: AngularFirestore) { 
    this.afAuth.authState.subscribe(auth => { 
     this.users = afs.collection<User>('users', ref => ref.where('readers.' + auth.uid, '==', true)).valueChanges(); 
    }); 
    } 

Wenn ich Benutzer die Regel all Lesen erlauben, ich verwende die richtigen Einträge

match /users/{userId=**} { 
     allow read, write; 
    } 

Wenn ich die Regel hinzufügen, um mit uid zu filtern, bekomme ich den Fehler Fehlende oder unzureichende Berechtigungen.

match /users/{userId=**} { 
     allow read, write: if resource.data.readers[request.auth.uid] == true || 
         resource.readers[request.auth.uid] == true; 
    } 

Schätzen Sie jede Hilfe auf, was ich falsch für die Regeln gemacht habe. Vielen Dank im Voraus.

+0

Ich glaube, Sie einen '.' innen' wenn resource.data.readers setzen müssen. [Anfrage .auth.uid] == true' wie folgt – Hareesh

+0

Das wäre ein Syntaxfehler. – William

+0

ok in den Dokumenten, die sie '$ (request.auth.uid)' verwendet haben, um den Wert zu erhalten. versuche 'if resource.data.readern [$ (request.auth.uid)] == true' – Hareesh

Antwort

0

Haben Sie versucht, Ihre Regeln für Datenbankregeln auf auth = null zu ändern?

{ 
    "rules": { 
    ".read": "auth == null", 
    ".write": "auth == null" 
    } 
} 
+0

Das wird nicht funktionieren, da eine Sammlung mehrere Dokumente haben wird, auf die jedes Dokument von verschiedenen Benutzern zugegriffen wird. – William

0
//Object structure 
"documentToShare"{ 
documentData: {}, 
documentUsers:{user1UID,user2UID} 
} 

//Firebase rules 
Rules:{ 
"documentToshare: { 

match documentToshare/documentUsers/&uid 
} 
} 

es ist ein schnelles Beispiel und wahrscheinlich nicht gültig, aber es sollte Ihnen die Idee