Es war sehr schwer für mich, mit zu beginnen zu verstehen, aber die Regeln sind sehr flexibel und lassen Sie die Basis Zugriff auf Ihre Daten auf der Grundlage anderer Datenbankinhalte. Grundsätzlich gewähren Sie Zugriff auf einen Knoten und diese Berechtigung gilt auch für alle untergeordneten Elemente und kann nicht aus tieferen Knoten in der Struktur entfernt werden. Sie können diese Datenbankregeln in der Konsole anwenden, aber es muss ein API vorhanden sein, wenn Sie es ebenfalls verwenden müssen, um die Regeln für die gesamte Datenbank festzulegen. Sie müssen ein einziges Dokument sein, damit Sie die Benutzer nicht hartcodieren möchten, aber Sie könnten sie in einen versteckten und unzugänglichen Knoten legen, auf den die Regeln zugreifen können.
Nehmen wir zum Beispiel an, Sie möchten, dass Personen Freunde mit anderen Personen befreunden und dass die andere Person beide Personen akzeptieren und zur Freundesliste hinzufügen kann. Sie könnten ein Schema ähnlich wie dieses:
uid
"friends"
friendUid1
friendUid2
friendUid3
"private"
... some private data your friends can read
"friendRequests"
targetUid
requestorUid -> can be written to only by requestorUid
Der erste Schritt einen Wert friendRequests/$targetUid/$requestorUid
schreibt. Die einzige Person, die auf diesen Knoten schreiben kann, ist diejenige, die als requestorUid authentifiziert wurde. targetUid würde Lesezugriff auf den targetUid-Knoten gewährt, so dass sie es lesen könnten, da es sich um ein untergeordnetes Element handelt, das jedoch nicht geschrieben wird.
Dann können Sie $requestor/friends/$targetUid
für $ targetUid basierend auf der Existenz von friendRequests/targetUid/requestorUid
Schreibzugriff erteilen. Dies ermöglicht es der Person, die die Freundschaftsanfrage erhalten hat, ihre eigene Benutzer-ID in die Freundesliste des Anfragers zu schreiben, aber nur, wenn der Anfragende bereits eine eigene Benutzer-ID in eine Anfrage geschrieben hat, um ein Freund zu sein. Sie würden dann die Benutzer-ID des Anfragers auf ihre eigene Freundesliste schreiben. Wenn sich die Benutzer-ID eines angemeldeten Benutzers in ihrer Freundesliste befindet, können sie auf die privaten Daten zugreifen.
{
"rules": {
"$uid": {
".read": "auth.uid === $uid",
".write": "auth.uid === $uid",
"friends": {
"$friendId": {
".write": "root.child('friendRequests').child($friendId).child($uid) && auth.uid === $friendId"
}
},
"private": {
".read": "data.parent().child('friends').child(auth.uid).exists()"
}
},
"friendRequests": {
"$targetUid": {
".read": "auth.uid === $targetUid",
"$requestorUid": {
".write": "auth.uid === $requestorUid"
}
}
}
}
}
Lassen Sie uns einige „echte“ ids verwenden und sagen, dass uid 100 will Freunde mit uid 200 sein, die sie ihren eigenen ID 100 schreiben würde für 200 eine Anfrage zu sein, ist dies zulässig, da auth.uid übereinstimmen $ requestorUid und entsprechen dem letzten Schreibregel:
ref = db.getReference("friendRequests/200/100");
ref.setValue(true);
Wenn Benutzer-ID 200 anmeldet, können sie alle ihre Freundanfragen an friendRequests/200
lesen. Sie sehen, dass Benutzer 100 gebeten wird, ihr Freund zu sein, also fügen sie zuerst 100 zu users/200/friends
hinzu. Dies ist zulässig, da auth.uid 200 ist und sie vollen Lese-/Schreibzugriff auf den gesamten Knoten users/200
und alle untergeordneten Elemente haben.
Weiter können sie auch zu users/100/friends/200
schreiben, weil diese Regel:
"root.child('friendRequests').child($friendId).child($uid) && auth.uid === $friendId"
auth.uid
200 sein wird, und der Scheck werden sehen, dass 100 Freunde mit 200 werden gebeten, weil friendRequests/200/100
existiert und dieser Knoten ist nur beschreibbar Benutzer 100.
Das Sicherheitsmodell für die Firebase-Datenbank wird in der Dokumentation hier beschrieben: https://firebase.google.com/docs/database/security/. Es wird auf den Firebase-Servern erzwungen, also nicht spezifisch für Ihren iOS-Client. Ich empfehle, dass Sie die Dokumentation studieren, versuchen, sie für Ihren Anwendungsfall funktionsfähig zu machen, und kommen Sie hierher zurück, wenn Sie bei der Implementierung der Regeln Probleme haben. –