返回

在 Firebase 安全规则中只允许更新特定字段

Android

在 Firebase 安全规则中只允许更新一个字段

简介

Firebase 安全规则是一项强大的工具,可用于控制对 Firestore 数据库中数据的访问。如果你需要保护数据库中的特定字段不被编辑,而只允许更新其他字段,本指南将向你展示如何做到这一点。

问题:需要只更新一个字段

想象一下你有一个 Firestore 数据库,其中包含一个名为 "users" 的集合。每个文档都有多个字段,包括 "name"、"age" 和 "activeStatus"。你想保护 "name" 和 "age" 字段不被编辑,同时仍然允许更新 "activeStatus" 字段。

解决方案:Firebase 安全规则

Firebase 提供了灵活的安全规则,允许你精确控制对数据的访问。以下规则将只允许更新 "activeStatus" 字段:

match /{document=**} {
  allow update: if request.resource.data.keys().hasOnly(["activeStatus"]);
}

规则详解

  • match /{document=**}:此规则适用于数据库中的所有文档。
  • allow update: 允许更新操作。
  • if request.resource.data.keys().hasOnly(["activeStatus"]):只有当请求的数据键仅包含 ["activeStatus"] 时才允许更新。

代码示例

为了演示如何使用规则,假设你的数据库中有一个名为 "users" 的集合,其中包含以下文档:

{
  "uid": "123",
  "name": "John Doe",
  "age": 30,
  "activeStatus": true
}

使用上述安全规则,你可以仅更新 activeStatus 字段,而不会影响其他字段。例如,以下更新请求将被允许:

{
  "activeStatus": false
}

而以下更新请求将被拒绝:

{
  "name": "Jane Doe"
}

结论

使用 Firebase 安全规则,你可以精确控制对 Firestore 数据库中数据的访问。本指南中提供的规则将只允许更新你指定的字段,保护其他字段不被编辑。

常见问题解答

1. 我可以允许更新多个字段吗?
是的,你可以将其他字段添加到规则中的键列表中,例如:["activeStatus", "username"]

2. 如何保护所有字段不被编辑?
删除规则中的 allow update 行即可。这将阻止任何更新操作。

3. 规则中使用的 hasOnly 函数是什么?
hasOnly 函数检查对象是否仅包含指定键。

4. 我可以在规则中使用其他条件吗?
是的,你可以使用 Firebase Matchers 语法中的其他条件,例如:

  • hasAll
  • in
  • <, <=, ==, !=, >=, >

5. Firebase 安全规则有哪些最佳实践?

  • 使用最少的权限
  • 将权限分配给角色而不是个人用户
  • 定期审查和更新规则