javascript - 无法在 Firestore (Vue.js / Firestore) 中编辑由其他用户创建的文档
问题描述
提前感谢您的帮助,这一直让我发疯!
我遵循 Firestore 数据模型,用户可以在其中创建自己的文档,这些文档附加到他们的用户 ID 以确保用户只能创建和查看他们创建的请求。但是,我有一个管理员需要访问和编辑这些用户提交的请求。
到目前为止,我已经能够通过 collectionGroup('subcollection') 访问子集合。虽然它确实返回了文档,但如果我尝试更新或删除其中的任何一个(除了我自己作为管理员创建的那些),它会返回一个未捕获的(承诺)FirebaseError: No document to update错误。
HTML:
<!-- Add New Request -->
<input
type="submit"
@click="addRequest"
value="Save and Add"
/>
<!-- Update Past Request -->
<button
@click="updateRequest()"
type="button"
v-if="modal == 'edit'"
>Update
</button>
<!-- Delete Past Request -->
<button
@click="deleteRequest(request)"
type="button"
v-if="modal == 'edit'"
>Delete
</button>
<!-- Set return objects -->
data() {
return {
requests: [],
request: {
//Standard
req_assigned: null,
req_contact: null,
req_status: null,
timestamp: null
},
}
}
<!-- Firestore Assign -->
firestore() {
const user = fb.auth().currentUser;
return {
requests: db.collection("uzers").doc(user.uid).collection("requestz"),
uzers: db.collection("uzers").doc(user.uid),
bulksettings: db.collection("bulksettingz")
};
},
JAVASCRIPT:
// Add New Request
addRequest() {
this.$firestore.requests.add(this.request);
}
// Update Past Request
updateRequest() {
this.$firestore.requests.doc(this.request.id).update(this.request);
},
// Delete Past Request
deleteProduct(doc) {
this.$firestore.requests.doc(doc.id).delete();
},
错误:
index.cjs.js?e89a:350 Uncaught (in promise) FirebaseError: No document to update: projects/vue-shop-276c4/databases/(default)/documents/uzers/k0yZFhDbldVpf6FhhPMcykK5GJD3/requestz/9ET8nk53MxBx3JlhZqKx
at new FirestoreError (webpack-internal:///./node_modules/@firebase/firestore/dist/index.cjs.js:350:28)
因此,再次回顾一下,我正在尝试编辑和删除其他用户添加的请求。这已经困扰了我很长一段时间了。非常感谢任何可以为我指明正确方向的人。
解决方案
您需要创建一组 firebase 规则来控制对文档的访问,文档中有一个示例。
https://firebase.google.com/docs/firestore/solutions/role-based-access?authuser=0
推荐阅读
- forms - Microsoft Access Form 组合框和计算
- javascript - 在线类型错误:无法读取未定义的属性“推送”
- javascript - 通过 JavaScript 动态注入谷歌分析代码
- json - 通过 JSON 在 Draw2D.js 中保存和恢复图表
- android - Flutter:build/app/outputs下的apk/release目录和flutter-apk目录有什么区别?
- java - 在spring boot环境中实现自定义注解
- c# - WebApi .Net Framework 4.8 中的 AWS Cloudwatch 日志
- r - 在填充堆积图中外推 100%
- python - 如何使用函数删除列表中的重复行?
- google-cloud-platform - 具有 1:2 cpu/ram 比率的 GCP 机器