我试图仅更新一个字段 (activeStatus) 并确保所有其他字段不可编辑。
我已经尝试了
request.resource.data.keys().hasOnly(["activeStatus"])
request.resource.data.diff(resource.data).affectedKeys().hasOnly(['activeStatus'])
如果您想确保用户只能更新
activeStatus
字段,您的更新规则将如下所示:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function is_unchanged(key) {
let in_old = key in resource.data;
let in_new = key in request.resource.data;
return (!in_old && !in_new)
|| (
in_old && in_new
&& request.resource.data[key] == resource.data[key]
);
}
match /some/{document} {
allow update: if is_unchanged('available')
&& is_unchanged('checkBeforeBuy')
&& is_unchanged('description')
// Repeat for all fields that should not change
&& is_unchanged('validity');
}
}
}