realtime - rápido mostrando publicaciones de todos los usuarios de Firebase
reglas firebase (1)
Necesitará un nodo padre diferente llamado Libros: -
En este momento su JSON es algo como esto: -
posts : {
userID1 : {
BOOK_11_ID : {.....}
};
userID2 : {
BOOK_21_ID : {.....},
BOOK_22_ID : {.....},
BOOK_23_ID : {.....},
BOOK_24_ID : {.....},
}
}
Tienes que modificar tu estructura JSON de base de datos a:
posts : {
Users_books :{
userID1 : {
BOOK_11 : true // Value ''true'' means that this user
// has subscribed or bought this book or whatever
};
userID2 : {
BOOK_21 : true,
BOOK_22 : true,
BOOK_23 : true,
BOOK_24 : true,
}
},
Books:{
BOOK_11_ID : {/Book details/};
BOOK_21_ID : {/Book details/};
BOOK_22_ID : {/Book details/};
BOOK_23_ID : {/Book details/};
BOOK_24_ID : {/Book details/};
}
}
Modifique sus reglas de seguridad para que la sección ''Libro'' esté visible para todos los usuarios autenticados.
{
"rules" :{
"Users_books" : {
".write" : "auth != null && auth.uid === $uid", // Will allow only the user to make any change within its node and no-one else
".read": "auth != null && auth.uid === $uid"
},
"Books" : {
".write" : "auth != null", // Will allow all the users that are authenticated to your app to access every books detail.
".read" : "auth != null"
}
}
}
Ahora lo que tienes que hacer es:
1) Si es el usuario que está creando el libro; A continuación, almacene los detalles del libro en el nodo padre ''Libros'' en el libro uid y establezca el valor de book_ID en verdadero en el nodo de usuarios.
2) Si la base de datos es back-end, es decir, la ingresaste; Siempre que el usuario se suscriba o compre libros, simplemente busque el idioma de ese libro y configúrelo como verdadero en la sección de ese usuario.
PD : siempre despliegue su base de datos en un abanico; es mucho más fácil buscarlo. Aunque estoy bastante seguro de que vas a querer almacenar algunos detalles personales del usuario en el futuro cercano, para eso simplemente crea otro nodo. Llámalo ''Usuarios'' , las reglas de seguridad serán las mismas que ''Users_books'' y debajo ''Parent'' de los usuarios anexarán detalles de cada usuario con su uid como clave.
Necesito crear un UISearchController usando firebase como back-end. Actualmente tengo dos usuarios en firebase. Un usuario ha hecho una publicación y la otra ha realizado cuatro publicaciones. Me gustaría poder buscar el título de todos los libros en mi base de datos (que son cinco). Sin embargo, a partir de ahora, solo puedo buscar los libros que cargó el usuario que inició sesión actualmente. A continuación hay una captura de pantalla de cómo se ve mi base de datos y cómo se ve mi código actualmente.
databaseRef.child("posts").child(userID!).observe(.childAdded, with: { (snapshot) in
let key = snapshot.key
let snapshot = snapshot.value as? NSDictionary
snapshot?.setValue(key, forKey: "uid")
if(key == self.loggedUser?.uid)
{
print("same as logged in user")
}
else
{
self.usersArray.append(snapshot)
self.followUsersTableView.insertRows(at: [IndexPath(row:self.usersArray.count-1,section:0)], with: UITableViewRowAnimation.automatic)
}
}) { (error) in
print(error.localizedDescription)
}
}