【发布时间】:2020-09-08 15:05:54
【问题描述】:
我继承了一个项目,但在尝试更新特定集合的属性时遇到权限问题。
查看已设置的 Firestore 规则,它列出了多个 update 规则,我想知道,这是否允许?我尝试在 Firebase 中使用规则游乐场,但我收到一条错误消息,告诉我其中一条规则没有定义 name 属性,这是正确的,因为我没有更新 name财产。然后 Firebase 会跳过该规则并转到下一个规则以查看它是否适用?
供参考,收集规则如下;
match /teams/{id} {
allow read: if request.auth.uid != null
&& request.auth.uid in resource.data.members;
allow read: if isAdmin();
allow create: if true;
allow update: if request.auth.uid != null
&& request.resource.data.keys().hasOnly(['name', 'owners', 'members'])
&& request.resource.data.name is string
&& request.resource.data.name.size() >= 1
// ToDo: Validate values in list
&& request.resource.data.owners is list
&& request.resource.data.owners.size() >= 1
// ToDo: Validate values in list
&& request.resource.data.members is list
&& request.resource.data.members.size() >= 1
&& request.auth.uid in resource.data.owners;
allow update: if request.auth.uid != null
&& request.resource.data.keys().hasOnly(['name', 'owners', 'members'])
&& request.resource.data.name == resource.data.name
&& request.resource.data.owners == resource.data.owners
// ToDo: Validate values in list
&& request.resource.data.members is list
&& request.resource.data.members.hasAll(resource.data.members)
&& exists(path('/databases/' + database + '/documents/subinvites/' + request.auth.uid + id));
allow update: if isAdmin();
}
我正在尝试像这样更新team 集合上的members 属性;
Firebase.firestore()
.collection("teams")
.doc(teamId)
.update({
members: Firebase.firestore.FieldValue.arrayUnion(userId),
});
但是,看看上面的规则和代码,这肯定行不通,因为两个更新角色似乎都要求请求包含 name、owners 和 members,其中作为请求只通过members。这也意味着如果name 属性,则条件request.resource.data.name == resource.data.name 不可能为真
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security