Firebase 安全规则:只允许更新一个字段
Posted
技术标签:
【中文标题】Firebase 安全规则:只允许更新一个字段【英文标题】:Firebase security rules: allow update only one field 【发布时间】:2021-07-08 09:24:39 【问题描述】:我正在尝试仅更新一个字段 (activeStatus) 并保护所有其他不可删除的字段。
我已经尝试过request.resource.data.keys().hasOnly(["activeStatus"])
【问题讨论】:
“不为我工作”很难解决。请将您的问题编辑至show the error you get, the minimal, complete rules and the corresponding code that reproduces the problem。 @FrankvanPuffelen 我做改变 【参考方案1】:request.resource.data.diff(resource.data).affectedKeys().hasOnly(['activeStatus'])
【讨论】:
这是一个非常优雅的解决方案【参考方案2】:如果您想确保用户只能更新 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');
【讨论】:
以上是关于Firebase 安全规则:只允许更新一个字段的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Firestore 安全规则 |如果字段值与 auth uid 相同,则允许读取