Dies ist Datenbankstruktur.Firebase-Regeln, die dem Benutzer das Schreiben von Daten in Android nicht erlauben
Dies sind Datenbank Regeln:
{
"rules": {
".read": true,
"shops-product-list": {
"$uid": {
// grants write access to the owner of this user account whose uid must exactly match the key ($uid)
".write": "auth !== null && auth.uid === $uid",
}
}
}
}
Schlüssel für Geschäfte Produkte-Liste angemeldet ist in uid des Benutzers (ignorierten ersten Schlüssel dh -1)
Angemeldeten Benutzer zu versuchen, schreibe neue Daten mit dieser Logik.
private void addShopVariant(String pid, String vid, String mrp, String sellPrice) {
// Create new post at /user-posts/$userid/$postid and at
// /posts/$postid simultaneously
final String uid = getUid();
String key = pid + "_" + vid;
//String key = databaseReference.child("shops-product-list").child(uid).push().getKey();
ShopProductVariant shopProductVariant = new ShopProductVariant(pid, vid, mrp, sellPrice);
Map<String, Object> shopProductVariantValues = shopProductVariant.toMap();
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/shops-product-list/" + uid + "/"+ key, shopProductVariantValues);
//childUpdates.put("/user-posts/" + userId + "/" + key, postValues);
databaseReference.updateChildren(childUpdates);
}
Funktion funktioniert gut, wenn ich Regeln festlege.
Aber ich möchte nur eingeloggte Benutzer sollten in der Lage sein zu schreiben, dass auch nur ihre eigenen Daten.
was ist falsch ist über Firebase-Regeln?
Aus einem schnellen Blick sieht es aus wie die Regeln funktionieren sollten. Können Sie den Code weiter reduzieren, um nur konstante Werte zu verwenden? Zum Beispiel: Was bringt 'getUid() 'zurück? Ist das wirklich der angemeldete Benutzer? Beachten Sie auch, dass 'updateChildren()' einen Completion-Listener verwendet, der Ihnen mehr darüber verrät, warum der Vorgang fehlgeschlagen ist. –