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 实时数据库安全规则允许更新但未设置

Firebase Firestore 安全规则 |如果字段值与 auth uid 相同,则允许读取

Firebase 存储安全规则,允许公共或所有者私有文件访问

Firebase 存储安全规则不适用于文件夹

Firebase Firestore更新时间字段安全问题

Firebase存储安全规则为特定用户提供访问权限