2017-11-29 1 views
0

Ich habe eine Sammlung von Dokumenten. Jedes Dokument hat Kind uid, die eine Referenz an den Besitzer ist. Exemplarische Dokument:Suche in den Dokumenten, die der Benutzer hat, um in firebase zu lesen

{ 
    "uid": "slfjs092320i3jf023jf", 
    "content": "Example" 
} 

ich sie unter /documents Sammlung speichern wollen und nur Benutzern erlauben, mit uid passend, sie zu speichern und abzurufen. Ich habe die folgenden Regeln erstellt:

Leider, wenn ich Dokumente des Benutzers abrufen möchte, erhalte ich die Berechtigung verweigert. So rufen Sie Dokumente ab, die ich verwende:

export default getUserDocuments =() => { 
    const userUid = firebase.auth().currentUser.uid; 
    return firebase.database() 
     .ref('/documents') 
     .orderByChild('uid') 
     .equalTo(userUid) 
     .once('value'); 
}; 

Wie kann ich Benutzerdokumente abfragen? Ich denke, die verweigerte Berechtigung bezieht sich auf Leseeinschränkungen, die für die Abfrage erforderlich sind.

Antwort

0

Firebase Database erzwingt Leserechte beim Anhängen eines Listeners. Um von /documents lesen zu können, benötigen Sie eine Leseberechtigung für /documents. Da dies bei Ihren Sicherheitsregeln nicht der Fall ist, wird der Listener abgelehnt.

Dies ist möglicherweise zunächst kontraintuitiv und bedeutet, dass Sicherheitsregeln nicht zum Filtern von Daten in der von Ihnen gewünschten Weise verwendet werden können. Dies ist in der Dokumentation als rules are not filters bekannt und war das Thema many previous questions. Ich empfehle Ihnen, einige von denen zu überprüfen, und melden Sie sich zurück, wenn Sie weitere Fragen haben.

+0

Vielen Dank für Ihre Antwort. Was wäre der beste Weg, um diese Daten zu speichern? Angenommen, meine Dokumente haben auch eine Kategorie. Soll ich zwei Sammlungen erstellen? Ein namens 'usersDocuments' mit Struktur { $ uid: { Inhalt: "Beispiel" } } und der zweite' documentsWithCategories' mit Struktur { $ Kategorie: { document1tId: true, document2Id: wahr } } ? –

+0

Normalerweise erhalten Sie für jeden Anwendungsfall, der von Ihrer aktuellen Struktur nicht erfüllt werden kann, eine Liste auf oberster Ebene. Diese Listen können entweder vollständige/teilweise Duplikate oder nur manuelle Indizes sein (wie in Ihrem Kommentar). –

Verwandte Themen