我正在尝试撰写文档,但是
缺少权限或权限不足。
我的规则如下:
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
设置
答案 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
变量密切相关 包含请求路径中的当前文档,而不是 正在撰写的文件。