我想使用比现有时间戳更旧的时间戳来阻止数据添加。样本数据库:
{
"latest" : {
"517" : {
"PARAM1" : {
"timestamp" : 11492,
"value" : 6593
}
}
}
}
Firebase安全规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"latest": {
"$id": {
"$param": {
"timestamp": { ".validate": "newData.val() >= data.val()" }
}
}
}
}
}
现在,有趣的部分。当我检查从模拟器添加其他数据时,它可以按预期工作。较小的时间戳被拒绝,较高的时间戳被添加。但这对从Java代码添加相同数据没有任何影响。
应拒绝的样本数据:
/latest/517
{
"PARAM1" : {
"timestamp" : -5,
"value" : 643
}
}
我com.google.firebase:firebase-admin:4.0.3
按照“管理数据库API”部分中所述使用纯Java 。
POJO:
public class TimeValue {
public long timestamp;
public double value;
public TimeValue(long timestamp, double value) {
super();
this.timestamp = timestamp;
this.value = value;
}
}
插入:
Map<String, TimeValue> timeValue = new HashMap<String, TimeValue>();
timeValue.put("PARAM1", new TimeValue(-5L, 643));
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference idRef = database.getReference("latest/517");
idRef.setValue(timeValue);
为什么这样工作?这没有任何意义。
当您将Firebase用作管理员或服务帐户时,不会检查验证规则-因为,好吧,您是管理员:)
如果您只希望普通访问数据库,则可以以普通帐户登录。
如果您想拥有管理员权限,但仍希望检查验证规则,则只需要使用一个始终满足读/写规则的“特殊”帐户即可。我前段时间偶然发现了这个问题,有两种基本方法可以做到,在我的问题中进行了解释(显然同样安全,因为那是我当时的问题):
.read
/.write
规则中检查,并且仅对于服务帐户为true 。.read
/ .write
)对其uid,email或其他属性进行硬编码。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句