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

时间:2018-08-09 14:27:19

标签: firebase google-cloud-firestore firebase-security-rules

规则集如下保护用户输入:

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

规则如下:

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

  function isModifyingPermissions(){
    return request.resource.data['permissions'] != null;
  }
}

我坚持使用isModifiyingPermissions()函数。如果请求具有permissions属性的值,它将正确拒绝写入。但是,如果没有提供permissions属性,则该规则将崩溃,说明如下:

Error: simulator.rules line [19], column [15]. Property permissions is undefined on object.

一个人怎么写“检查请求资源上某个属性的存在”?

1 个答案:

答案 0 :(得分:2)

好,这是解决方法:

  function isModifyingPermissions(){
    return request.resource.data.keys().hasAny(["permissions"]);
  }