存储在数据库中的模型如下:
{
"ownerUid": <my auth UID>,
"teamName: "Team 1",
"teamDescription: "Team 1 desc"
}
我的初始访问规则是这样的:
service cloud.firestore {
match /databases/{database}/documents {
match /teams/{teamId} {
allow read: if resource.data.ownerUid == request.auth.uid;
allow write: if true; //ignore this
}
}
}
我为获得团队而运行的查询如下:
Query query = FirebaseFirestore.getInstance()
.collection("teams")
.orderBy("teamName")
运行此查询将始终导致“PERMISSION DENIED”,我不确定其原因是什么。
出于测试目的,我也尝试了以下规则:
allow read: if true; //Works
allow read: if request.auth.uid != null; //Works
allow read: if request.auth.uid == <my auth uid>; //Works
allow read: if resource.data.ownerUid != null; //Fails
在成功的规则上,我可以在返回的团队中看到ownerUid,并看到它不是null,并且与之匹配。
答案 0 :(得分:1)
在您当前的代码中,您尝试从集合teams
中读取。由于您无法访问该完整集合,因此拒绝阅读。
如果您想让用户查询他们创建的文档,您需要做两件事:
你已经完成了#2,但没有做#1。要使工作正常,请使用如下查询:
String uid = FirbaseAuth.getInstance().getCurrentUser().getUid();
Query query = FirebaseFirestore.getInstance()
.collection("teams")
.whereEqualTo("ownerUid", uid)
.orderBy("teamName")
另请参阅Secure and query documents based on auth.uid上的文档部分。