Dies ist mein Ansatz, um bestimmten Benutzern den Zugriff auf ihr zugewiesenes "Shop" -Objekt zu ermöglichen.Firebase: Zugriff auf verschiedene Bereiche je nach Benutzer
func shopFetch() {
self.shop.removeAll()
let shopRef = FIRDatabase.database().reference().child("shop").child(someIDforShop).child("menu")
shopRef.observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let something1 = dictionary["some1"]
let something2 = dictionary["some2"]
let shopper = Shop(some1: something1, some2: something2)
self.shop.insert(shopper, at: 0)
self.collection.reloadData()
}
}, withCancel: nil)
}
Das sind meine Sicherheitsregeln
rules: {
"users": {
"$uid": {
".read": "auth != null || auth.uid == $uid",
".write": "auth != null && auth.uid == $uid",
"$yourShop": {
".read": "true"
}
},
"shop": {
"$yourShop": {
".read": "root.child('users').child(auth.uid).child($yourShop).val() == true",
".write": "root.child('users').child(auth.uid).child($yourShopManager).val() == true || root.child('users').child(auth.uid).child('isAdmin').val() == true"
}
},
}
Lassen Sie uns sagen, ich habe dies in meiner Datenbank:
<app-name>: {
"shop": {
"shop1": {
"menu": {
"some1": "thing1",
"some2": "thing2"
}
},
"shop2": {
"menu": {
"some1": "thing1",
"some2": "thing2"
}
},
"shop3": {
"menu": {
"some1": "thing1",
"some2": "thing2"
}
},
"users": {
"K4of4ofp32kfoE": {
"shop": {
"shop1": true
}
},
"fj3i53ogF34oGf329ieQ": {
"shop": {
"shop2": true
}
},
}
Was soll ich in let shopRef
in someIDforShop
schreiben? Dadurch kann jeder Benutzer auf seinen "Shop" zugreifen. Ich habe versucht mit childByAutoID()
, vorausgesetzt, es wird die Daten in Bezug auf den Benutzer abrufen, wie in den Regeln angegeben. Aber shopFetch()
gibt nichts zurück, wenn ich frage print(snapshot)