我已经建立了一个简单的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”与我要传递的数据相等的所有文档。
请在下面看到指向我的数据库结构图像的链接:
答案 0 :(得分:0)
事实证明,这里的问题是我试图使用规则“过滤”数据,这是不正确的,并且会失败。
查询已在此处执行过滤器,因此我只需要将规则更改为:
match /employee/{employeeID} {
allow read, write: if request.auth.uid != null;
}
这使我可以访问数据,而查询仅选择了要检索的数据。