2017-10-30 2 views
1

Ich plane eine App, mit der Benutzer Beiträge erstellen können, die für andere Benutzer nicht lesbar sein sollten, bis zu dem Datum/der Uhrzeit, die der Ersteller des Posts ausgewählt hat.Festlegen einer Veröffentlichungszeit für Firebase-Datenbankeinträge?

Ist dies mit der Firebase Realtime Database möglich? Wie würde ich so etwas umsetzen?

Ich denke, dass es einfach nicht im Client-Code zu implementieren, würde nicht sicher sein, da authentifizierte Benutzer konnten alle Beiträge manuell, auch die "noch nicht veröffentlicht"? Kann ich dafür Datenbankregeln verwenden, obwohl jeder Beitrag sein eigenes Veröffentlichungsdatum hat?

Antwort

2

Ja, es ist möglich, mit Firebase. Sie müssen lediglich für jeden Post ein Flag mit dem booleschen Standardwert false und TIMESTAMP hinzufügen. Dies bedeutet, dass der Post standardmäßig nicht von anderen Benutzern gelesen werden kann. Dann müssen Sie einen Listener auf diesem TIMESTAMP-Feld verwenden, um zu sehen, wann das aktuelle Datum/die aktuelle Uhrzeit mit dem Datum/der Zeit übereinstimmt, die der Ersteller des Posts ausgewählt hat. Wenn es gleich ist, dann setze einfach den Wert des Flags auf true. Dies bedeutet, dass der Beitrag von anderen Benutzern gelesen werden kann. Das ist es!

Sie dies auch mit Sicherheitsregeln wie dies erreichen können:

//Ensure that data being read is less than or equal with the current date/time. 
".read": "data.child('timestamp').val() <= now" 
+0

Ich habe die Firebase-Regeln noch nicht gelesen, aber ich nehme an, dass ich die boolesche Flagge als Grundlage für eine Regel verwenden würde, richtig? Und der Listener läuft in der Client-Webseite Code? – BadCash

+0

Ja, das ist richtig. –

1

Die einzige Lösung, die ich mir vorstellen kann, ist die Erstellung eines ganz neuen Knotens scheduledPosts mit eigenen Regeln, damit der Ersteller sie nur vor dem Veröffentlichungsdatum sehen/bearbeiten kann (wenn das Ihr Ziel ist).

{ 
    "users": { 
    "uid_1": { 
     "someData": "data", 
     ... 
    } 
    }, 
    "scheduledPosts": { 
    "pid_1": { 
     "postData": "data", 
     "uid": "uid_1", 
     "publishDate": 1695840299, // must be in milliseconds since epoch 
     ... 
    } 
    } 
} 

Und Ihre scheduledPosts ‚s Regeln wie folgt aussehen:

{ 
    "rules": { 
    "scheduledPosts": { 
     "$post_id": { 
     ".read": "root.child('scheduledPosts').child($post_id).child("publishDate").val() < now || root.child('scheduledPosts').child($post_id).child("uid") === auth.uid", 
     ".write": "root.child('scheduledPosts').child($post_id).child("publishDate").val() < now || root.child('scheduledPosts').child($post_id).child("uid") === auth.uid" 
     } 
    } 
    } 
} 
1

Sie Regel lesen können, mit Kombination von now

Die Regel etwas wie folgt aussehen:

".read": "(auth != null) && (data.child('publish_time').val() < now)" 
Verwandte Themen