为什么我的Firestore数据被拒绝权限?

时间:2019-05-14 08:16:08

标签: java android google-cloud-firestore firebase-security-rules

我已经建立了一个简单的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());
                        }
                    }
                });

我在Firestore中的规则:

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;
    }
  }
}

我希望能够在“员工”集合中获取其“ workplaceId”与我要传递的数据相等的所有文档。

请在下面看到指向我的数据库结构图像的链接:

https://imgur.com/GArRGkg

1 个答案:

答案 0 :(得分:0)

事实证明,这里的问题是我试图使用规则“过滤”数据,这是不正确的,并且会失败。

查询已在此处执行过滤器,因此我只需要将规则更改为:

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

这使我可以访问数据,而查询仅选择了要检索的数据。