У меня есть база данных firebase с узлом тем, которые содержат различные темы.Когда я пытаюсь применить правило чтения на этом узле, я могу прочитать значение в имитаторе правил безопасности Firebase, но не в моем реальном приложении.Но если я применю правило к самому родительскому узлу, я смогу извлечь значение.
Вот моя база данных:
Ниже приведена моя база безопасности firebaserule:
{
"rules": {
"users":{
"$user_id":{
".read": "auth != null && !root.child('blocked/'+$user_id+'/'+auth.uid).exists()",
".write": "$user_id === auth.uid"
}
},
"topics":{
//".read": "true",
"$topic_id":{
//restricting blocked users from reading the topcis
".read": "true",
".write": "auth != null"
},
}
}
}
Теперь, если я раскомментирую это ".read" правило на родительском узле, я смогу прочитать, но не когда применю его с подстановочным знаком.Я также могу отлично писать в узел темы.
Это функция, в которой я пытаюсь получить доступ к данным из базы данных Firebase.
public void loadTopics() {
//Load topics for the first time
createTopicFab.show();
Query topicQuery = FirebaseDatabase.getInstance().getReference()
.child(FirebaseValues.TOPICS_TABLE).limitToLast(TOTAL_ITEM_EACH_LOAD).orderByChild("createdTimestamp");
itemPos = 0;
topics.clear();
topicIds.clear();
topicQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
// Add the values in the topics list and notify the adapter
loadingLayout.setVisibility(View.GONE);
Topics topic = dataSnapshot.getValue(Topics.class);
Log.d(TAG, "loadTopics(), Topic: " + topic.getText());
topics.add(0, topic);
if (itemPos++ == 0) {
//first key
lastKey = String.valueOf(dataSnapshot.getKey());
}
topicIds.add(0, dataSnapshot.getKey());
topicsListAdapter.notifyDataSetChanged();
swipeRefTopic.setRefreshing(false);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
// remove the values in the topics list and notify the adapter
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}