2016-06-25 7 views
4

Bisher (alle können nur Besitzer lesen, aber bearbeiten) Ich habe mit dieser KonfigurationFirebase Echtzeit-Datenbank Regeln

{ 
    "rules": { 
    "items": { 
     ".read" : true, 
     "$uid": { 
     ".read" : true, 
     ".write": "auth != null && auth.uid == $uid" 
     } 
    } 
    } 
} 

Validierung und andere weggelassen Regeln Verzeichnisse. /Artikel/user1/item1 /Artikel/user2/item1

Alle Artikel Verzeichnis und alle Benutzer Artikel lesen können (keine privaten Elemente)

Was brauche ich?

flache Anordnung von Elementen

"items" : { 
    "item1": {}, 
    "item2": {} 
} 

mit userId als Eigentum

"item1" : { 
    "uid": "userId" 
} 

Nur Benutzer erstellt Element kann es bearbeiten/löschen, aber alle können es sehen.

Ich dachte über Doppel Artikel in anderem Verzeichnis wie

"public_items": { 
     "item1": {}, 
     "item2": {} 
} 


"items": { 
    "userId": { 
     "item1": {}, 
     "item2": {}, 
    } 
} 

Aber es scheint, als ob nicht eine gute Idee.

Regeln werden atomar angewendet. Das bedeutet, dass ein Lese- oder Schreibvorgang sofort fehlschlägt, wenn an dieser Position keine Regel oder an einem übergeordneten Ort vorhanden ist, der Zugriff gewährt. Selbst wenn jeder betroffene untergeordnete Pfad verfügbar ist, schlägt das Lesen am übergeordneten Speicherort fehl vollständig. https://firebase.google.com/docs/database/security/securing-data#read_and_write_rules_cascade

wenn Regeln nicht für jedes Element angewendet werden, wie Artikel-Verzeichnis mit verschiedenen Eigentümern zu bauen?

Antwort

4

Sie können nur mit der /items/itemId/uid umgehen.

{ 
    "rules": { 
    "items": { 
     ".read" : true, 
     "$itemId": { 
      ".write": "(!data.exists() && newData.child('uid').val() == auth.uid) || (data.child('uid').val() == auth.uid && newData.child('uid').val() == auth.uid)" 
     } 
    } 
    } 
} 

Die obigen Regeln sind eine mögliche Lösung. Wir erlauben jedem, alles zu lesen, was darin ist items. Aber nur Benutzer, die das Element besitzen (/itemId/uid) können erstellen/bearbeiten. Außerdem erzwingen wir, dass das neue oder bearbeitete Element die Benutzer-ID hat.