firebase-realtime-database - 避免父级覆盖的 Firebase 规则
问题描述
在我的数据库中,我在 root 上有一个这样的节点:
-dbroot
--usernameuid
---user1:'someid'
---user2:'someid'
---user3:'someid'
...
为了创建这个,我使用下面的代码:
database().ref('usernameuid/' + that.state.username).set(auth().currentUser.uid).then(() => {
...
最近,我不确定它是如何发生的,但有人设法删除或覆盖了所有--usernameuid
节点。
在我的调查中,尽管我正在使用正则表达式检查用户名,但我发现通过了空白用户名。
无论如何,firebase 得到了空白用户名(that.state.username)并覆盖--usernameuid: 'someid'
了所有数据。
为了防止这种情况在未来不再发生,(应用程序是实时的,所以不能修改代码)我可以写什么样的 firebase 规则:
- 用户只能将孩子添加到
--usernameuid
- 不能覆盖所有喜欢
--usernameuid: 'something'
- 不能删除下面的任何东西
--usernameuid
解决方案
我找到了这样的解决方案:
{
"rules": {
".read": "auth.uid !== null",
...
"otherchild1": {
".write": "auth.uid !== null",
},
"otherchild2": {
".write": "auth.uid !== null",
},
...
"usernameuid": {
"$username" : {
".write": "auth.uid !== null",
}
},
摘要:父母没有规则,在您想要的孩子中指定 .write 。但是在 root 上,您需要删除全局 .write 规则并为每个孩子单独指定,因此 firebase 不支持级联规则。
推荐阅读
- oracle - 在用户只能访问与其 id 列相关的列的条件下向用户授予选择列权限 - Oracle pl/sql
- java - 在 @SpringBootTest 中使用类时,@ConfigurationProperties 不起作用
- c# - 服务器应用程序出错 ipHostInfo.AddressList[0]
- typescript - 解析 jest.mock 中的 TypeScript 路径
- javascript - 如何一次删除多张照片中的对象?
- scrollbar - 水平滚动菜单一直滚动到开始
- python - 为什么我需要更新与基地的连接?
- python-3.x - 如何在列表中附加多个字符串值(如果存在于列表中)
- javascript - 使用 String.replace() 时防止在 JavaScript 中替换 \n
- reactjs - ReactiveSearch(Web):一旦返回同一页面,分页就会重置