【发布时间】:2020-03-31 21:52:39
【问题描述】:
我正在尝试将我的 Firebase 规则从测试每个用户都可以读取和写入每个文档的测试转移到只有作者可以更新或删除他们创建的文档的测试。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if request.auth != null;
allow update, delete: if request.auth != null && request.auth.uid == resource.data.author_uid;
allow create: if request.auth != null;
}
}
}
如果我尝试删除文档,这组规则会在 Firebase 初始化时导致“权限缺失或权限不足”错误。如果我遵循原始规则,那么一切正常。
allow read, create: if request.auth != null
我做了一个标准的 firebase.initializeApp(但不想在这里发布我的密钥 - 让我们说相同的初始化适用于基本规则以及我拥有的其他三个 firebase 项目)。删除调用如下,也适用于更简单的规则集,但不适用于上述更严格的规则:
const decrement = firebase.firestore.FieldValue.increment(-1);
firestore.collection('story').doc(storyid).delete().then(function() {
firestore.collection('users').doc(getUserID()).update({
saves: decrement
});
})
【问题讨论】:
-
请编辑问题以显示未按您期望的方式工作的代码。仅仅看到规则是没有帮助的——代码和规则应该总是匹配的,我们需要看到这一点。我们还应该能够使用您提供的内容完全重现这种情况。
-
好吧,因为 Firebase 没有告诉您代码在哪里失败,所以很难查明......而且我无法发布 init 以及每次调用 firestore 读取、写入和更新。我会在问题中添加一点,但第一级答案是“我的规则集是否适合我想做的事情,即只允许登录自己数据的人进行更新、删除和创建”?跨度>
-
Firebase 无法控制 Stack Overflow,我看到有两个不是 Firebase 工作人员的人投票结束了这个问题,可能是因为您的更新没有及时发布。按照 Stack Overflow 的惯例,它之所以被关闭,仅仅是因为有足够多的人同意它是题外话,而且这种情况一直都在发生。我建议阅读链接以了解如何提出更好的问题,并在您的修改后再次发布。
-
作为一个小建议,我希望您将来会有所帮助-您在此处的第一个回复(已删除)说您认为您不必显示匹配的代码示例我在第一条评论中要求。这足以让潜在的问题审阅者在没有足够信息的情况下将其关闭为“离题”寻求调试帮助。现在您已经花时间添加了所请求的信息,似乎问题已重新打开。审核过程旨在帮助人们提出更好的问题。很抱歉给您带来了不好的体验。
-
抱歉,在尽可能多地扩展代码示例之前,我先发表了第一条评论。它在我身上。当面对我遇到的规则问题时,下面的答案应该可以帮助人们并为他们提供更好的选择。谢谢
标签: firebase google-cloud-firestore firebase-security