相关疑难解决方法(0)

Firebase:如何防止在 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)

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

firebase firebase-security google-cloud-firestore

6
推荐指数
1
解决办法
1206
查看次数

Firestore 请求中何时指定 writeFields 以及替换它们的内容?

模拟器现在显示一条错误消息,试图访问request.writeFields.
在此之前,writeFieldsFirestore 安全规则在实际请求中不起作用。

该消息指出以下内容:

模拟器只模拟客户端SDK调用;对于这些模拟,request.writeFields 始终为 null

这是否意味着writeFields仅在 HTTP 请求中指定?

文档仅指出此

writeFields:写入请求中写入的字段列表。

由此产生的一个问题

我正在寻找替换此属性的内容,因为它是"always null"
request.resource.datainupdate还包含不在 requests中但据我所知已经在文档中的字段。

例子

// Existing document:

  document:
    - name: "Peter"
    - age: 52
    - profession: "Baker"

// Update call:

  document:
    - age: 53

// request.resource.data in allow update contains the following:

  document:
    - name: "Peter"
    - age: 53
    - profession: "Baker"
Run Code Online (Sandbox Code Playgroud)

但我只想要age.

firebase firebase-security google-cloud-firestore

4
推荐指数
1
解决办法
1357
查看次数