Почему мне отказано в разрешении на данные моего Firestore? - PullRequest
0 голосов
/ 14 мая 2019

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

Я попытался изменить правило на:

allow read: if true;

и я могу читать данные

мой запрос в приложении:

db.collection("employee")
                .whereEqualTo("workplaceId", w.getId())
                .get()
                .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                        for (QueryDocumentSnapshot doc : queryDocumentSnapshots) {
                            Employee e = doc.toObject(Employee.class);
                            e.setId(doc.getId());
                            Log.d(TAG, "staff: " + e.getFirstName());
                        }
                    }
                });

мои правила в пожарном депо:

service cloud.firestore {
  match /databases/{database}/documents {

    match /workplace/{workplaceID} {
      allow read: if resource.data.ownerId == request.auth.uid;
      allow write: if request.auth.uid != null;
    }

    match /employee/{employeeID} {
        allow read: if resource.data.workplaceId == request.resource.data.workplaceId;
      allow write: if request.auth.uid != null;
    }
  }
}

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

См. ниже ссылку на изображение моей структуры БД:

https://imgur.com/GArRGkg

1 Ответ

0 голосов
/ 14 мая 2019

Оказывается, моя проблема здесь заключалась в том, что я пытался использовать правила для «фильтрации» данных, что неверно и завершится ошибкой.

Запрос уже выполняет этот фильтр, поэтому я простопросто нужно изменить правило на:

match /employee/{employeeID} {
        allow read, write: if request.auth.uid != null;
    }

Это дало мне доступ к данным, и запрос выбирал только те данные, которые я хотел получить.

...