Firebase 安全规则:仅允许更新一个字段

问题描述 投票:0回答:2

我试图仅更新一个字段 (activeStatus) 并确保所有其他字段不可编辑。

我已经尝试了

request.resource.data.keys().hasOnly(["activeStatus"])

android firebase google-cloud-firestore firebase-security
2个回答
5
投票
request.resource.data.diff(resource.data).affectedKeys().hasOnly(['activeStatus'])

0
投票

如果您想确保用户只能更新

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');
        
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.