Правила безопасности "get ()" не работают в приложении - PullRequest
0 голосов
/ 27 июня 2018

Не работает функция get() в правилах безопасности.

Возвращает разрешение, отклоненное клиенту, но проходит моделирование.

enter image description here

Схема конфигурации / прав доступа представляет собой структуру массива:

конфиг / разрешение ->

---------------------------> CollectionName1:

----------------------------------------------- -----> 0: UID1

----------------------------------------------- -----> 1: UID2

---------------------------> CollectionName2:

----------------------------------------------- -----> 0: UID3

----------------------------------------------- -----> 1: UID4

Я также пытался использовать отдельные поля ключ / значение в конфиге / разрешениях, так что

конфиг / разрешение ->

---------------------------> CollectionName1: UID1

---------------------------> CollectionName2: UID3

с правилом

allow read: if request.auth.uid == get(/config/permissions).data[c], и это прошло моделирование и не удалось в приложении. Если я жестко закодирую UID вместо request.auth.uid, это даст тот же результат.

UID определенно правильно в приложении. Это было проверено с использованием следующего правила, где оно прошло в симуляции и приложении.

allow read: if request.auth.uid == 'USER_ID_HERE'

и путем сравнения вывода logcat UID с приведенным выше.

Пожалуйста, помогите. Это N-й день попытки найти подходящий способ структурирования и запроса Firestore. Я уверен, что это проблема либо с get() вызовом, либо с тем, как я пишу вызов.

Код Android:

 FirebaseFirestore db = FirebaseFirestore.getInstance();
    FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
            .setTimestampsInSnapshotsEnabled(true)
            .build();
    db.setFirestoreSettings(settings);

    Log.d("UID", FirebaseAuth.getInstance().getCurrentUser().getUid());

    DocumentReference docRef = db.collection(collection).document("X153@111");
    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());
            }
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...