firebase - 如何只允许 “owns”数据的用户编辑呢?火力基地

标签 firebase firebase-realtime-database firebase-security

我有这个数据结构:

enter image description here

我希望有一项 Firebase 规则,允许拥有代码段的用户能够进行编辑,但其他人则不允许。所以在某种程度上,它的工作原理如下:

  • 在添加数据之前,每个人都可以添加特定语言
  • 添加时和添加后,仅允许“所有者”进行编辑

我将如何只允许创建 JavaScript 代码片段的用户对其进行编辑?

最佳答案

如果我正确理解了您要查找的内容,您的 $language 编写规则将如下所示:

{"rules":{
    "codes":{
        "$codeId":{
            "snippets":{
                "$language":{
                    ".write": "(!data.exists() && newData.child('uid').val() == auth.uid ) || (data.child('uid').val() == auth.uid && newData.child('uid').val() == auth.uid)"
                }
            }
        }
    }
    }
}

更新:

添加后,您仍然希望在 /codes/$codeId 上添加写入规则,我强烈建议您从代码分支中移动代码片段分支,因为您要添加单个节点的复杂性很高。您将开始处理这种复杂的规则逻辑,并且您的应用程序代码也将被这种结构淹没。

尝试使用更加解耦的东西,例如下面的结构:

{
    "rules":{
        "codes":{
            "$codeId":{
                ".write": "true",
                "snippets":{
                    "$snippetID":{
                    }
                }
            }
        },
        "snippets":{
            "$snippetID":{
                "$language":{
                    ".write": "(!data.exists() && newData.child('uid').val() == auth.uid ) || (data.child('uid').val() == auth.uid && newData.child('uid').val() == auth.uid)"
                }
            }
        }
    }
}
<小时/>

说明

根据要求,我为这个特定的写入逻辑添加了一些详细信息。

根据我的要求,用户如果正在写入新数据或者“拥有”他正在尝试写入的数据,则可以写入

!data.exists() || data.child('uid').val() == auth.uid

由于“拥有”数据意味着该数据的所有者 uid 作为子项,因此我假设如果他正在写入数据,则用户 uid 需要始终存在。这就是为什么我添加了 newData.child('uid').val() == auth.uid。 (记住 newData 表示用户尝试写入的数据)。

(!data.exists() && newData.child('uid').val() == auth.uid ) || (data.child('uid').val() == auth.uid && newData.child('uid').val() == auth.uid)

我可以将其规范化如下,以避免逻辑两侧的 newData 检查,但至少对我来说,它使得理解更加清晰。

 (!data.exists() || data.child('uid').val() == auth.uid) && newData.child('uid').val() == auth.uid

关于firebase - 如何只允许 “owns”数据的用户编辑呢?火力基地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027010/

相关文章:

firebase - 如何使用命令行部署Firebase数据库安全性规则?

java - 未在 firebase 中创建字符串的数组列表

JavaScript Promise 绕过解析并继续执行 .then()

firebase - 如何使用控制台在 firebase 实时数据库中添加根级节点

firebase-realtime-database - 如何编写规则以防止从数据库中删除任何节点

java - 使用 Firebase 将多行写入 Java 中的 CSV 文件

c# - Unity Firebase 订阅/取消订阅重新加载应用程序的主题问题

ios - FirebaseUI-IOS 处理空 TableView 条件

java - 无法使用 Firebase 云消息传递发送通知

rest - 简单(和)肮脏的 Firestore 身份验证规则