既存のものより古いタイムスタンプのデータの追加をブロックしたいと思います。サンプル・データベース:Firebaseデータベースセキュリティルールは、Javaコードではなく、シミュレータで動作します
{
"latest" : {
"517" : {
"PARAM1" : {
"timestamp" : 11492,
"value" : 6593
}
}
}
}
Firebaseセキュリティルール:今すぐ
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"latest": {
"$id": {
"$param": {
"timestamp": { ".validate": "newData.val() >= data.val()" }
}
}
}
}
}
、興味深い部分。シミュレータから別のデータを追加することを確認すると、期待どおりに動作します。 Smalerのタイムスタンプは拒否され、上位のものが追加されます。しかし、JavaコードからのSAMEデータの追加には影響しません。
拒否されるべきサンプルデータ:
/latest/517
{
"PARAM1" : {
"timestamp" : -5,
"value" : 643
}
}
Admin Database APIセクションで説明したように、私は純粋なJavaを使用com.google.firebase:firebase-admin:4.0.3
を使用するには。
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);
それがそのように動作するのはなぜ?それは意味をなさない。
ありがとうございました!私はこれにあまりにも多くの時間を費やした;-)。 – androfan