Правила безопасности Firestore - если существует заявление - PullRequest
0 голосов
/ 01 февраля 2020

Я пытался реализовать правила безопасности для моего проекта Firestore. Это утверждение здесь не работает, кто-нибудь может сказать мне, почему? На данный момент я ничего не понимаю.

Чего я пытаюсь достичь: пользователь может читать список пользователей, только если этот пользователь есть в списке пользователей.

match /databases/{database}/documents {  

     match /groups/{group}/userlist/{document=**}{
        allow read: if exists(/databases/$(database)/groups/$(group)/userlist/$(request.auth.uid));

     //for troubleshooting: the general rule below works fine and access is granted 
     //allow read :if request.auth.uid != null;

    }
  }

Вот пример кода из мое приложение, где доступ с указанным заявлением не предоставляется. Как я сказал в закомментированных строках в коде «правил»: я получаю результаты, когда устанавливаю правила для более общего условия доступа.

Следующий код взят из onBind в адаптере. Я добавил строку, которая печатает uid, просто чтобы быть уверенным.

System.out.println("UserId: "+ mAuth.getCurrentUser().getUid());

db.collection("groups").document(model.getGroupId()).collection("userlist").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot queryDocumentSnapshots) {

                int members = queryDocumentSnapshots.size();
                holder.mPreviewText.setText("Number of Members: " + members);
            }
        });

I/System.out: UserId: iWBdGRNmJCOEtXWKefeD2T7cH1l2
I/System.out: UserId: iWBdGRNmJCOEtXWKefeD2T7cH1l2
I/System.out: UserId: iWBdGRNmJCOEtXWKefeD2T7cH1l2
I/System.out: 1
I/System.out: UserId: iWBdGRNmJCOEtXWKefeD2T7cH1l2
W/Firestore: (21.3.1) [Firestore]: Listen for Query(target=Query(groups/uaRV4n21PWov5p6VPlYH/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
I/System.out: UserId: iWBdGRNmJCOEtXWKefeD2T7cH1l2
I/System.out: UserId: iWBdGRNmJCOEtXWKefeD2T7cH1l2
W/Firestore: (21.3.1) [Firestore]: Listen for Query(target=Query(groups/tqsFIMhaMdZUfx6M3Guz/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
I/System.out: UserId: iWBdGRNmJCOEtXWKefeD2T7cH1l2
I/System.out: UserId: iWBdGRNmJCOEtXWKefeD2T7cH1l2
W/Firestore: (21.3.1) [Firestore]: Listen for Query(target=Query(groups/tm09NSiqZ5rDaBZzH52g/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
W/Firestore: (21.3.1) [Firestore]: Listen for Query(target=Query(groups/iye5A0JaltId8xYeQLie/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
W/Firestore: (21.3.1) [Firestore]: Listen for Query(target=Query(groups/cnj4BOMHY0LlXb7KJsW0/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
W/Firestore: (21.3.1) [Firestore]: Listen for Query(target=Query(groups/UGmozZfEOKXX1sajT1NW/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
W/Firestore: (21.3.1) [Firestore]: Listen for Query(target=Query(groups/S4lJIyAMfDtQUTS08PWa/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
W/Firestore: (21.3.1) [Firestore]: Listen for Query(target=Query(groups/uaRV4n21PWov5p6VPlYH/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
W/Firestore: (21.3.1) [Firestore]: Listen for Query(target=Query(groups/tqsFIMhaMdZUfx6M3Guz/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}

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

Query(target=Query(groups/uaRV4n21PWov5p6VPlYH/userlist order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}

example #1

1 Ответ

0 голосов
/ 02 февраля 2020

Хорошо, я наконец нашел свою ошибку. Извините, что беспокою вас, ребята. Я пропустил "/ documents /" в предложении if-Существование.

Правильный путь:

match /databases/{database}/documents {  

     match /groups/{group}/userlist/{document=**}{
        allow read: if exists(/databases/$(database)/documents/groups/$(group)/userlist/$(request.auth.uid));

    }
  }

Теперь все работает, и все снова обретает смысл.

...