2017-07-04 3 views
0

In Firebase-Speichersicherheitsregeln (nicht Echtzeitdatenbank) gibt es eine Möglichkeit, eine Überprüfung durchzuführen, ob ein anderes Objekt im Pfad existiert oder die Metadaten eines anderen Objekts existieren.Firebase-Speicher-Sicherheitsregel: Prüfen, ob ein anderes Objekt existiert/Metadaten des Prüflings überprüfen


Einige Hintergrund

meine Speichersicherheitsregeln festgelegt werden derzeit so, dass Benutzer haben Zugriff nur gelesen und nicht den Zugang zu ihren /users/{userId}/ Pfade schreiben.

Ich habe eine Admin-Cloud-Funktion, die eine Datei in /users/{userId}/necessary-file.pdf speichert. Und ich möchte nicht, dass Benutzer in der Lage sind, diese Datei zu modifizieren oder zu schreiben und nur Cloud-Funktionen, um das Recht dazu zu haben. Um dies zu erreichen Ich denke, ich kann wie für die Dateinamen entsprechen:

match /users/{userId}/{fileName} { 
    allow write: if !fileName.matches("necessary-file.pdf") 
} 

Frage

Gibt es eine Möglichkeit, mich für nur erlauben Benutzer etwas-andere-file.pdf zu schreiben, wenn sie bereits eine necessary-file.pdf auf dem gleichen Pfad (oder sogar woanders, wenn das besser funktioniert). Alle, während sie immer noch nicht schreiben können necessary-file.pdf.

Also gibt es eine Möglichkeit für mich, so etwas wie diesen Pseudo-Code zu tun? :

match /users/{userId}/{fileName} { 
    allow read: if request.auth.uid == userId; 
    allow write: if (!fileName.matches("necessary-file.pdf")) && ("necessary-file.pdf".exists()) 
} 

Als Alternative kann ich meine Cloud-Funktionen haben eine Metadaten erforderlich-file.pdf und prüfen Sie, dass zu schreiben. Gibt es irgendeine Möglichkeit, etwas wie diesen Pseudo-Code auszuführen? :

allow write: if "necessary-file.pdf".metadata['canUserWrite'] == 'yesUserCan' 

Schließlich

Was ist das wirklich cool ist, dass, wenn diese in irgendeiner Weise der Ferne möglich ist, kann es zwischen Feuerbasis Datenbank und Feuerbasis Speicherregeln in einer Kommunikation verwendet werden, nicht so Echtzeit Weg. (referring to this question here) Eine Cloud-Funktion kann Änderungen in dem beabsichtigten Feld in der Echtzeitdatenbank abhören und eine Datei in den Firebase-Speicher schreiben, nach dem der Firebase-Speicher suchen kann.

Antwort

3

Die Cloud Storage-Sicherheitsregeln von Firebase können nur auf Informationen über die aktuelle Anfrage und Datei zugreifen. Sie haben keinen Zugriff auf das gesamte Speichersystem und können daher nicht prüfen, ob eine andere Datei vorhanden ist.

Der Grund dafür ist, dass die Regeln für jede Anforderung im Speicher ausgewertet werden. Der Zugriff auf Cloud Storage für andere Objekte würde die Leistung verlangsamen und das System nicht skalierbar machen. Derselbe Grund erklärt, warum Sie aus den Sicherheitsregeln nicht auf die Firebase-Datenbank zugreifen können.

Wenn Sie eine solche Kontrolle wünschen, sollten Sie in den Cloud-Funktionen nach Firebase suchen. Wenn Ihre Benutzer ihre Dateien in einen "Staging" -Bereich hochladen, können Sie mit einer Cloud-Funktion überprüfen, ob sie alle Voraussetzungen erfüllt haben, und die Datei erst dann an den tatsächlichen Speicherort verschieben (zur weiteren Verarbeitung oder für Clients verfügbar machen). .

+0

Macht Sinn! Ich werde dann mehr darüber nachdenken. Vielen Dank für die schnelle Antwort und guten 4. Juli Frank! – johnozbay

Verwandte Themen