#android #firebase #firebase-realtime-database #firebase-security
#Android #firebase #firebase-база данных в реальном времени #firebase-безопасность
Вопрос:
У меня есть простая структура базы данных, к которой я хочу добавить правила безопасности firebase, но правила блокируют все разрешения, даже когда я устанавливаю значение .read и .write в true в структуре узла, вот пример правила
{
"rules": {
"Lines": {
".read": true,
".write": false
},
"Links": {
".read": true,
".write": false
}
}
}
Вот пример моей структуры базы данных
{
"Lines" : {
"Line 1" : "Lines 1238443",
"Line 2" : "Lines 4657673"
},
"Links" : {
"Links 1" : "Link 3282873",
"Links 2" : "Link 3493934"
}
}
Я пытаюсь разрешить только операции чтения, но мое приложение продолжает говорить, что в разрешении отказано, я проверил документацию, она выглядит прямолинейно, но я не могу сказать, что именно происходит, потому что даже когда я пытался
{
"rules": {
"Lines": {
".read": true,
".write": true
},
"Links": {
".read": true,
".write": true
}
}
}
Я все еще получаю ошибку отказа в разрешении
Вот код для чтения из базы данных
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String lin = snapshot.child("Links").child("Links 1").getValue(String.class);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(getApplicationContext(), "Error " error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
Комментарии:
1. Можете ли вы показать код, используемый для чтения данных?
2. Я обновил вопрос, пожалуйста, перепроверьте
Ответ №1:
Вы пытаетесь выполнить чтение из корня базы данных. И поскольку ваши правила не предоставляют никому доступ на чтение к корню базы данных, чтение отклоняется.
Если вы хотите только прочитать Links
дочерний элемент из базы данных, вы должны указать это дочернее имя перед подключением прослушивателя, поэтому:
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.child("Links").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String lin = snapshot.child("Links 1").getValue(String.class);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(getApplicationContext(), "Error " error.getMessage(), Toast.LENGTH_SHORT).show();
}
})
Теперь мы подключаем прослушиватель к /Links
, где правила безопасности позволяют считывать данные.