правило базы данных Firebase в реальном времени для аутентификации пользователя - PullRequest
0 голосов
/ 17 февраля 2019

Какое правило мне следует использовать, если я хочу, чтобы только пользователь аутентификации мог записывать данные в базу данных firebase, а затем пользователь аутентификации мог читать данные от другого пользователя аутентификации.Например, пользователь А записывает данные в базу данных, я хочу, чтобы пользователь Б также мог читать данные от пользователя А.

Например, JSON:

{
  "User Information" : {
    "47NiYA7rGNa8nJvlnnxzpxhqvCl2" : {
      "-LYuXT8d5Hzm4Sp_7buK" : {
        "deceasedName" : "You",
        "deceasedRelative" : "Are",
        "noLot" : "34",
        "relativeAddress" : "Main Road",
        "relativeContact" : "0231456789"
      }
    },
    "LV4y2BXnNWWkJix6YwTRJV8LdQs2" : {
      "-LYufF_KMO1o7EULIK8Y" : {
        "deceasedName" : "amir",
        "deceasedRelative" : "loqman",
        "noLot" : "104",
        "relativeAddress" : "aman",
        "relativeContact" : "123456"
      }
    }
  }
}

Для таблицы "Информация о пользователе" имеется 2пользователь аутентификации с Uid = "47NiYA7rGNa8nJvlnnxzpxhqvCl2" и Uid = "LV4y2BXnNWWkJix6YwTRJV8LdQs2".Поэтому я хочу, чтобы каждый пользователь мог получать все данные из таблицы «Информация о пользователе».

Этот код позволял пользователю получать только свои собственные данные:

 databaseReference = FirebaseDatabase.getInstance().getReference("User Information");
    FirebaseUser user = firebaseAuth.getCurrentUser();
    String UserID = user.getUid();
    databaseReference.child(UserID).addListenerForSingleValueEvent(new ValueEventListener() { {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot INFOSnapshot : dataSnapshot.getChildren()){
                UserInformation  userInfo = INFOSnapshot.getValue(UserInformation.class);
                infoList.add(userInfo);
            }
            UserInfoAdapter userInfoAdapter = new UserInfoAdapter(InfoDisplayActivity.this, infoList);
            listViewINFO.setAdapter(userInfoAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

Я использую это правило пожарной базы:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

Так что мне нужно изменить правило firebase или изменить кодировку?

1 Ответ

0 голосов
/ 18 февраля 2019

Для части записи я предлагаю вам изменить свои правила следующим образом:

{
  "rules": {
    ".write": "auth != null",
    "User Information": {
      "$user_id": {
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

С этим правилом записи каждый пользователь может писать только в свою собственную информацию о пользователе, но все же может читать все в базе данных.Для получения дополнительной информации о безопасности пользователя я предлагаю вам прочитать документацию Firebase .

Что касается чтения всей пользовательской информации, вам нужно всего лишь удалить часть .child(UserID) в своем коде, например:

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() { {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...