При медленном inte rnet подключении я получаю PERMISSION_DENIED
[Firestore]: прослушивание запроса (target = Query (lists / t8hDrmGrKrjdjIrO7dt8 / порядок элементов по che, ca, cre, name ); limitType = LIMIT_TO_FIRST) не удалось: Статус {code = PERMISSION_DENIED, description = Отсутствует или недостаточно разрешений., Причина = null}
структура базы данных:
/lists/{listId}/items/{itemId}
документ lists
имеет массив col
, содержащий uid, разрешенные для чтения и записи в коллекцию items
Для выполнения sh этого я использую следующее правило:
allow read, write: if request.auth.uid in get(/databases/$(database)/documents/lists/$(listId)).data.col
И следующий android код:
mRef.document(glist.getId()).set( glist );
enterList( glist);
Поправьте меня, если я ошибаюсь, причиной этой иногда PERMISSION_DENIED
ошибки является тот случай, когда lists
документ создается после попытки чтения из него, что приводит к нарушению правила, так как нет документа
Я решил это путем ожидания ожидания создания документа lists
до пытаясь просмотреть его содержимое, используя следующий код:
mRef.document(glist.getId()).set( glist ).addOnSuccessListener( new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
enterList( glist);
}
} );
Это казалось решить проблему, но потом понял, что addOnSuccessListener
может быть запущено только в режиме ONLINE, в результате чего он зависает в режиме OFFLINE.
Какие есть другие варианты решения этой проблемы при соблюдении правила?