Firebase Firestore:写入权限不足

时间:2017-12-18 15:33:13

标签: firebase google-cloud-firestore

我正在尝试撰写文档,但是

  

缺少权限或权限不足。

我的规则如下:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid == resource.data.uid;
    }
  }
}

我正在尝试写

const accountBalanceRef = db.collection('accountBalances').doc()
accountBalanceRef.set({
    type: s.type,
    accountName: s.accountName,
    startingBalance: s.startingBalance,
    endingBalance: s.endingBalance,
    statementYear: s.year,
    statementMonth: s.monthNumber,
    createdAt: now,
    uid: this.props.uid
})

什么错了? this.props.uid是我的用户ID

已解决

在@Bob Snyder的帮助下,我使用以下规则解决了这个问题

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if request.auth.uid == resource.data.uid;
      allow write: if request.auth.uid == request.resource.data.uid;
    }
  }
}

我需要有不同的读写规则。我认为这是因为对于阅读,我并没有request.resource.data.uid设置

1 个答案:

答案 0 :(得分:3)

在Firestore安全规则中,resource.data是数据库中文档的值。您的规则不允许创建accountBalance文档,因为resource.data为空。

如果您希望规则要求accountBalance中的uid字段等于授权用户的uid,则规则应使用request.resource.data.uid

allow read, write: if request.auth.uid == request.resource.data.uid;

request.resource的文档说明:

  

[request]资源变量包含有关文档的数据和元数据   正在写它与resource变量密切相关   包含请求路径中的当前文档,而不是   正在撰写的文件。