Javascript 在事务中访问新文档时的Firestore安全规则?
我正在运行以下Firestore事务,以在Javascript 在事务中访问新文档时的Firestore安全规则?,javascript,google-cloud-firestore,firebase-security,Javascript,Google Cloud Firestore,Firebase Security,我正在运行以下Firestore事务,以在帐户集合中创建新文档,并将其新创建的ID添加到用户的帐户。(相反,发送到帐户的成员对象包含用户ID。) 我使用的是没有路径的.collection('accounts').doc(),但我遇到了权限缺失或不足的情况。错误。我的规则如下: service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow r
帐户
集合中创建新文档,并将其新创建的ID添加到用户的帐户
。(相反,发送到帐户的成员对象包含用户ID。)
我使用的是没有路径的.collection('accounts').doc()
,但我遇到了权限缺失或不足的情况。
错误。我的规则如下:
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;
,它就可以工作)。我应该将其设置为什么以允许访问尚未“存在”的文档?通过将规则更改为:
allow read, update, delete: if request.auth != null && (resource.data.members[request.auth.uid] == true || resource == null);
您可以在安全规则中使用以获取事务结束时(但在提交之前)的文档状态
因此,与阅读规则的人可能感到奇怪的resource==null
不同,您可以使用:
allow read, update, delete: if request.auth != null && getAfter(/databases/$(database)/documents/accounts/$(accountId)).data.members[request.auth.uid] == true;
这简直快把我逼疯了!非常感谢。甚至做一个!('createdBy'在resource.data中)
不起作用,我猜是因为resource
为空。。但是,当然,没有办法调试这个并找出答案。
allow read, update, delete: if request.auth != null && getAfter(/databases/$(database)/documents/accounts/$(accountId)).data.members[request.auth.uid] == true;