2016-06-12 12 views
2

Ich habe eine Datenstruktur wie diese bekommen:Firebase Sicherheitsregeln mit Wildcards

enter image description here

Wie kann ich /Restaurant/-KK37k6g5cYYippEHpZ3/User/-KK37k6g5cYYippEHpZ4/id ‚s-Wert innerhalb der Feuerbasis Sicherheitsregeln zugreifen? Die zwei Drucktasten sollten Platzhalter sein. Ich brauche etwas wie das:

+0

es wäre nett, wenn Sie uns etwas Hintergrund geben, auf welcher Logik Sie versuchen, zu erreichen. Lass mich raten. Möchten Sie sicherstellen, dass der Benutzer Schreibzugriff auf das Restaurant hat, wenn er eine Bestellung in diesem Restaurant hat? Oder möchten Sie Schreibzugriff nur auf die Benutzerbestellung geben? – adolfosrs

+0

Sorry, mein Fehler, hat die obige Abfrage geändert. Der Benutzer hat die gleiche Struktur wie die Bestellung. Ich möchte nur Benutzern, die Mitglied dieses Restaurants sind, Schreibzugriff gewähren. – dabo

+0

srry, aber jetzt bin ich mehr verwirrt. Warum hätten Sie 2 IDs in einem Benutzer? Warum machst du 'restaurantId/User/id/id'? Was sind diese 2 IDs? – adolfosrs

Antwort

3

Nicht sicher, ob ich vollständig verstanden habe, was Sie verlangen, aber hier geht meine Gedanken.

Das erste Problem in Ihrer Regel ist, dass Sie child($id) angeben, aber Sie sind bereits in der $id. Es ist implizit in Ihrem data, dass Sie sich auf $id beziehen.

Um Ihr Hauptproblem zu lösen, benötigen Sie keinen weiteren Platzhalter. Sie können einfach hasChild verwenden, um zu überprüfen, ob die auth.uid innerhalb restaurant/user ist.

"Restaurant": { 
    "$id": { 
     ".read": "auth.uid != null", 
     ".write": "auth.uid != null && data.child('User').hasChild(auth.uid)" 
    } 
} 
+0

Nach Refactoring meiner Datenstruktur die .hasChild() tat es für mich, danke! – dabo

+1

Das vorherige Problem war, dass data.child ('Benutzer') nicht die UserIDs als direkte Children hat, aber mit PushIDs dazwischen verschachtelt ist. Ein Restaurant kann mehrere Benutzer haben. – dabo

+0

Ich habe ein ähnliches Problem, aber es scheint nicht zu funktionieren. (Ich kann die Wildcard '$ id' nicht finden) Bitte sehen Sie sich an: https://stackoverflow.com/questions/44888876/firebase-database-rules-to-match-row – Richard

Verwandte Themen