Я делаю приложение для покупок с корзиной и сохраняю содержимое корзины в базе данных. Я установил правила, чтобы пользователь мог читать и писать только в своей тележке. вот мой код:

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 -

Я не уверен, имеет ли это какое-то значение, но пока нет ребенка с именем "Тележки"

0
Dragon 3 Окт 2020 в 16:24

1 ответ

Лучший ответ

Сообщение об ошибке показывает, что вы пытаетесь прочитать данные в /Orders/Users/lDQI2pwcuLfStHEfdC9cbfMsYf92, для которых не определены правила, поэтому чтение отклоняется.

Вы захотите обновить свои правила безопасности, чтобы также позволить пользователю читать свои заказы:

{
"rules": {
  ...
  "Orders": {
    "Users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid"
      }
    }
  },
}
0
Frank van Puffelen 3 Окт 2020 в 15:30