Это мой подход к тому, как разрешить конкретным пользователям доступ к их выделенному объекту «магазин».Firebase: доступ к различным разделам в зависимости от пользователя
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)
}
Это мои правила безопасности
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"
}
},
}
Скажем, у меня есть это в моей базе данных:
<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
}
},
}
Что я должен написать в let shopRef
в someIDforShop
? Выполнение этого действия позволит каждому пользователю получить доступ к своему «магазину». Я пробовал с childByAutoID()
, предполагая, что он будет извлекать данные относительно пользователя, как указано в правилах. Но shopFetch()
ничего не возвращает, когда я прошу print(snapshot)