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.
Macht Sinn! Ich werde dann mehr darüber nachdenken. Vielen Dank für die schnelle Antwort und guten 4. Juli Frank! – johnozbay