Firebase:如何防止在 Firestore 中写入特定字段?

Jem*_*Jem 6 firebase firebase-security google-cloud-firestore

规则集保护用户的条目,如下所示:

  • 只有他或管理员可以读取他的数据
  • 只有管​​理员可以更新用户的权限
  • 用户可以更新他的所有数据,除非他设置了权限对象

规则看起来像:

match /users/{userId} {
  allow read: if isCurrentUser(userId) || isAdmin();
  allow write: if (isCurrentUser(userId) && !isModifyingPermissions()) || isAdmin();

  function isModifyingPermissions(){
    return request.resource.data['permissions'] != null;
  }
}
Run Code Online (Sandbox Code Playgroud)

我被这个isModifiyingPermissions()功能困住了。如果请求具有permissions属性值,它会正确拒绝写入。但是,如果未permissions提供任何属性,则规则会崩溃,并说明以下内容:

Error: simulator.rules line [19], column [15]. Property permissions is undefined on object.
Run Code Online (Sandbox Code Playgroud)

如何编写“检查请求资源上是否存在属性”?

Jem*_*Jem 3

好的,这是解决方案:

  function isModifyingPermissions(){
    return request.resource.data.keys().hasAny(["permissions"]);
  }
Run Code Online (Sandbox Code Playgroud)

  • 自我注意:在提出问题之前再搜索一些:-)以下内容有帮助:/sf/ask/3372369311/是否被修改?rq=1 (2认同)