【发布时间】:2020-08-17 11:59:18
【问题描述】:
我有以下数据库集合'/player_profiles/{userId}'。我想使用只有request.auth.uid == userId 的规则,除非他们只更新字段匹配,这是一个数组。我试过了,但它拒绝了权限
match /player_profiles/{userId}{
allow write: if userId == request.auth.uid;
allow update: if (request.resource.data.keys().hasOnly(["matches"]) && request.auth != null);
}
这是运行更新以将项目添加到匹配数组的 Flutter 代码:
await DatabaseProvider()
.db
.collection(PLAYER_COLLECTION)
.document(widget.userProfile.userId)
.updateData({
'matches': FieldValue.arrayUnion([profile.userId])
});
我是 Firestore 规则的新手,但我认为这会起作用
能够得到我想要的行为:
match /player_profiles/{userId}{
allow write: if request.auth.uid == userId || (request.auth != null && request.resource.data.diff(resource.data).affectedKeys().hasOnly(["matches"]));
}
看看@Doug Stevenson 的回答,尽管我可以添加确保他们只被允许将自己的 userId 放入其他人的个人资料中。
【问题讨论】:
标签: flutter google-cloud-firestore firebase-security