Как запретить пользователям читать данные из документов Firestore? - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть структура базы данных, которая выглядит следующим образом:

Firestore-root
   |
   --- users (collection)
   |     |
   |     --- UidOne (document)
   |          |
   |          --- userName: "UserOne"
   |
   --- items (collection)
         |
         --- ItemIdOne (document)
         |     |
         |     --- itemName: "ItemOne"
         |
         --- ItemIdTwo
               |
               --- itemName: "ItemTwo"

Чего я хочу добиться - это запретить каждому пользователю читать имена элементов из каждого документа в коллекции items с использованием правил безопасности. Вот как я это делаю:

service cloud.firestore {
    match /databases/{database}/documents {
        match /items/{item} {
            allow read, write: if false;
        }
    }
}

Для отображения названий элементов я использую следующий запрос:

Query query = itemsRef.orderBy("itemName", Query.Direction.ASCENDING);

Когда я пытаюсь скомпилировать свое приложение, я получаю следующую ошибку:

com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: Missing or insufficient permissions.

Но названия предметов по-прежнему отображаются в моем RecyclerView. Как я могу предотвратить это?

1 Ответ

0 голосов
/ 08 мая 2018

Возможно, проверьте, поступают ли ваши предметы из локального кэша.

С этой страницы добавьте это в свой OnEvent

       String source = querySnapshot.getMetadata().isFromCache() ?
                    "local cache" : "server";
            Log.d(TAG, "Data fetched from " + source);

Если он читает из локального кэша, вы можете установить PersistenceEnabled (false) следующим образом (также упоминается на этой странице):

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(false)
        .build();
db.setFirestoreSettings(settings);

Даже если вы находитесь в сети, он будет считывать локальный снимок и обновлять снимок только в случае изменения данных. Это ваши правила, которые изменили не ваши данные. Я обнаружил, что при тестировании с установленным значением true я получил некоторые неожиданные результаты. Я считаю, что предпочитаю, чтобы оно было ложным при тестировании и изменении кода / правил.

...