Javascript 是否可以限制发送到firebase中未经身份验证(angularFire)客户端的数据量(“数据门”)?
这里我使用angularFire获取数据:Javascript 是否可以限制发送到firebase中未经身份验证(angularFire)客户端的数据量(“数据门”)?,javascript,angularjs,firebase,angularfire,Javascript,Angularjs,Firebase,Angularfire,这里我使用angularFire获取数据: angular.module('FireApp', ['firebase']) .controller('Document', function($scope, $routeParams, angularFire){ var url = "https://my-account.firebaseio.com/test" + "/" + $routeParams.data; angularFire(url, $scope, data);
angular.module('FireApp', ['firebase'])
.controller('Document', function($scope, $routeParams, angularFire){
var url = "https://my-account.firebaseio.com/test" + "/" + $routeParams.data;
angularFire(url, $scope, data);
});
问题是,这将加载“”及其所有子代和子代等…“/data”是一个对象数组,它可以(但不必-它很可能是一个字符串数组)看起来与“/data”的父对象相似:
基本上,我希望所有未经验证的angularFire客户端只接收数据数组中的那些元素,其中布尔标志meta.active=true,即活动标志需要决定,而angularFire请求时其祖辈将被发送到客户端。此外,未经验证的客户端无法写入/编辑任何数据。我想设置的规则应该是:“只要设置了'active=false'标志,就不要将该标志的祖父母发送给angularFire客户端,除非该客户端经过身份验证。”。因此,是的,规则需要是相对的,而不是绝对的。
只有经过身份验证的客户端才能接收/编辑所有数据。
我可以用Firebase简单的登录和安全规则制定这样的规则吗
如果无法为祖父母执行此操作,则可以将“活动”标志上移一级以影响其父母。
感谢您抽出时间,
Jared您需要重新构造数据,以便使用Firebase实现这一点。有关以下内容的背景信息,请参阅本博客文章: 构建数据的一种方法是创建两个单独的列表,一个用于活动项,另一个用于非活动项。当某个项目处于活动或非活动状态时,请确保将其从一个列表中删除并放入另一个列表中
{
“活动”:{
0: {
“数据”:{…},
“符号”:{…}
}
},
“非活动”:{
0: {
“数据”:{…},
“符号”:{…}
}
}
}
在您的安全规则中,您可以简单地阻止未经身份验证的用户访问非活动项目:
{
“规则”:{
“活动”:{
“.read”:正确
},
“非活动”:{
.read:“auth!=null”
}
}
}
希望这有帮助 谢谢你,阿南特。您的解决方案看起来不错,但这是否适用于包含活动/非活动分隔的任意数量的嵌套“数据”节点?如果您能及时回答上述问题,我将不胜感激,因为我希望将我的项目向前推进。不,它不适用于嵌套节点。如果您想嵌套,我会考虑创建一个全局活动/非活动列表(使用FiasBaseE.Puthor()来生成每个对象的唯一ID),然后将这些对象的名称作为数据节点内的引用存储起来。然后,您可以嵌套,但在从适当的列表中检索到实际对象的名称后,还需要获取该对象。非常感谢。我明白你的意思,这就是我要做的。现在看来这是我最好的解决办法。干杯
data: ["0" : {
"data" : [...],
"meta" : {
"active" : false
},
"sign" : [...]
},
"1" : {
"data" : [...],
"meta" : {
"active" : true
},
"sign" : {...}
},
"2" : {
"data" : [...],
"meta" : {
"active" : false
},
"sign" : {...}
}]