Я делаю приложение для покупок с корзиной и сохраняю содержимое корзины в базе данных. Я установил правила, чтобы пользователь мог читать и писать только в своей тележке. вот мой код:
final DatabaseReference cartListRef = FirebaseDatabase.getInstance().getReference().child("Carts");
double totalprice = buyCount.getValue() * Double.parseDouble(productPrice.getText().toString());
final HashMap<String, Object> cartMap = new HashMap<>();
cartMap.put("id", productId);
cartMap.put("name", productName.getText().toString());
cartMap.put("price", productPrice.getText().toString());
cartMap.put("date", saveCurrentDate);
cartMap.put("time", saveCurrentTime);
cartMap.put("quantity", Long.toString(buyCount.getValue()));
cartMap.put("discount", "");
cartMap.put("image", imageUrl);
cartMap.put("totalPrice", totalprice);
cartListRef.child("Users").child(mAuth.getCurrentUser().getUid())
.child("Products").child(productId)
.updateChildren(cartMap)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(ProductDetailsActivity.this, "تمت اضافة المنتج اٍلى السلة", Toast.LENGTH_LONG).show();
Intent intent = new Intent(ProductDetailsActivity.this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
}
});
И вот мои правила:
{
"rules": {
"Users": {
"$uid": {
".write": "auth != null && auth.uid == $uid",
".read": "auth != null && auth.uid == $uid"
}
},
"Products": {
".read": "auth != null",
".write": "auth != null"
},
"Carts": {
"Users":{
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
}
}
}
}
Я получаю отказ в разрешении на ошибку:
10-03 18: 04: 06.567 14964-15226 / com.cloud.fashenista W / SyncTree: прослушивание / Orders / Users / lDQI2pwcuLfStHEfdC9cbfMsYf92 не удалось: DatabaseError: Permission denied 2020-10-03 18: 04: 06.753 14964-15226 / com .cloud.fashenista W / SyncTree: прослушивание / Orders / Users / lDQI2pwcuLfStHEfdC9cbfMsYf92 / Products / IVvWWSaVC5YRMZoZs9AO не удалось: DatabaseError: Permission denied -
Я не уверен, имеет ли это какое-то значение, но пока нет ребенка с именем "Тележки"
1 ответ
Сообщение об ошибке показывает, что вы пытаетесь прочитать данные в /Orders/Users/lDQI2pwcuLfStHEfdC9cbfMsYf92
, для которых не определены правила, поэтому чтение отклоняется.
Вы захотите обновить свои правила безопасности, чтобы также позволить пользователю читать свои заказы:
{
"rules": {
...
"Orders": {
"Users": {
"$uid": {
".read": "auth != null && auth.uid == $uid"
}
}
},
}
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.