Огонь магазина РАЗРЕШЕНО, когда медленный интернет - PullRequest
0 голосов
/ 15 апреля 2020

При медленном 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.

Какие есть другие варианты решения этой проблемы при соблюдении правила?

...