У меня есть правило, которое корректно выполняется в симуляции правил Firestore, как показано ниже.
Документ / config / permissions - это множество массивов с именами X153, X154, X155 и т. Д., Которые содержат UID:
Когда я пытаюсь получить такой доступ в Android, я получаю ответ PERMISSION_DENIED.
Код:
DocumentReference docRef = db.collection("arcs").document("X153");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Log.d("FIREBASE", "DocumentSnapshot data: " + document.getData());
} else {
Log.d("FIREBASE", "No such document");
}
} else {
Log.d("FIREBASE", "get failed with ", task.getException());
}
}
});
UID, используемый в симуляции, такой же, как в Android:
Если я установлю правило для аутентификации доступа к UID напрямую
- Разрешение Android принято, документ возвращается.
Если я сглаживаю структуру config / permissions только для ключа / значений, например X153 : '9iXQBaG3Ycaey4cFUj8tZjhKMaB3'
, и меняю правило на
match /arcs/{x} {
allow read: if request.auth.uid == get(/config/permissions).data[x];
}
- Android возвращает разрешение на отказ.
Почему я получаю этот ОТКАЗ ОТ РАЗРЕШЕНИЯ, используя изображенное правило?