仅显示具有userid作为子项的项目
Show only items that have userid as child
以下是我的规则:
{
"rules": {
"deck":{
".read":true,
".write":true,
".indexOn": "user"
}
}
}
当前运行时:
deckRef.once('value', function(dataSnapshot) {
console.log(dataSnapshot.ref());
});
我得到我所有的数据返回:
{
"deck" : {
"-JkpwAnieKjQVsdtPD4m" : {
"deckName" : "Deck 1",
"user" : "simplelogin:1"
},
"-Jkq4unexm-qwhO_U2YO" : {
"deckName" : "Deck 2",
"user" : "simplelogin:1"
},
"-Jkq5-II1q5yM6w3ytmG" : {
"deckName" : "Deck 3",
"user" : "simplelogin:6"
},
"-Jks5mbMHmPB9MwnnOCj" : {
"deckName" : "Deck 4",
"user" : "simplelogin:1"
}
}
}
但我想阻止任何人访问与用户id不匹配的项目。
我试着把甲板部分改成:
"deck": {
".read":"data.child('user').val() === auth.uid"
}
但这没有任何回报。理想情况下,如果用户"simplelogin:1"登录,我希望它只返回项目1、2和4,如果"simplelogin:6"登录,则只返回项目3。
这是编写Firebase安全规则时常见的错误,如果我引用相关文档,这可能是最清楚的:
安全和防火墙规则自上而下运行
这是理解安全和Firebase规则的关键概念。子规则只能向已经声明的父节点授予额外的权限。他们不能撤销读或写权限。
考虑到你正在努力实现的目标,下一节似乎也非常相关:
规则不是过滤器
规则是以原子的方式应用的。这意味着,如果数据下的任何子路径不可访问,则整个读取或写入操作将立即失败。
因此,尽管您可能会倾向于将Firebase安全规则视为SQL语句中的WHERE
子句,但它们并不是这样工作的。如果你想确保每个用户的数据安全,你必须想出一种不同的方法来对数据进行建模。安全指南中有一个非常广泛(复杂)的聊天应用程序安全示例。
相关文章:
- 角度的项目列表 ng 重复,ng 单击显示全宽描述
- 我怎样才能重复显示接下来的15个项目
- 隐藏/显示包含单词的ul li项目.但只能入住李的子女
- Javascript中的列表,用于添加和显示所有项目
- 如何在点击时显示ul项目
- 限制ul元素中显示的项目
- 在underscore.js中显示列表中的所有项目(使用Parse.com)
- PHP无法显示带有“”的项目'"在他们身上
- HTML选择,在DOM中选择了正确的选项,但在firefox中显示了错误的项目
- 获取中继器控件ASP.Net中显示的单击项目文本框
- 仅显示具有userid作为子项的项目
- 从项目列表Jquery中仅选择(显示:块)元素
- 首先显示选择最多的项目
- 如果项目不匹配,则显示变量
- 只有一个项目显示在 x 轴 d3 中 - 使用刻度值的序号
- 在 HTML 中将数组的每个项目显示为换行符
- 如何正确使用熨斗可选?像铁页一样使用时,项目显示为null
- Html, javascript:滚动列表框项目-并为每个项目显示提示
- 根据从下拉列表中选择的项目显示ViewBag的属性并发布ID
- 如何向选中的项目显示一个箭头?