【发布时间】:2018-07-21 08:50:30
【问题描述】:
我正在运行以下 Firestore 事务以在 accounts 集合中创建一个新文档,并将其新创建的 ID 添加到用户的 accounts。 (相反,发送到帐户的members 对象包含用户ID。)
db.runTransaction(transaction => {
return transaction.get(db.collection('accounts').doc())
.then(res => {
const accountId = res.id;
transaction.set(db.collection('accounts').doc(accountId), {name, numberOfEmployees, businessTypes, industry, members})
transaction.set(db.collection('users').doc(uid), {accounts: {[accountId]: true}}, {merge: true})
return accountId;
}, error => error)
})
我使用的事实是 .collection('accounts').doc() 没有路径 returns a new document,但我遇到了 Missing or insufficient permissions. 错误。我的规则如下:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth.uid == userId;
}
match /accounts/{accountId} {
// allow read if user is a member or if the document does not exist
allow read : if resource.data.members[request.auth.uid] == true || !exists(/databases/{database}/documents/accounts/$(accountId));
// allow update, delete if user is a member
allow update, delete: if resource.data.members[request.auth.uid] == true;
// allow creation of any authenticated user
allow create: if request.auth != null;
}
}
}
我已经将其缩小到/accounts/{accountId} 上的read 规则(如果我将其设置为if true;,它可以工作)。我应该将其设置为什么以允许访问尚不“存在”的文档?
【问题讨论】:
标签: javascript google-cloud-firestore firebase-security