2017-09-13 11 views
2

我问,如果我有这个火力点数据库火力地堡规则如何知府添加或更新值,如果它`父删除

Misters 
+ 7m1fyYchDscr8tUeI13uPXvdDvM2 
+ gvTVc3gwRfTz3WL48vTGiiiTKZ22 
- vWZ55LGiraaIErIiiVN4NVQc6Eh1 
    active_type:true 
    age: 27 

如何防止增加新的节点或更新现有的节点,如果它的父被删除 (vWZ55LGiraaIErIiiVN4NVQc6Eh1)?

比如我有一个防止更新

{ 
    "rules": { 
     ".read": true, 
     ".write": "auth != null", 
     "Misters": { 
      "$Misterid": { 
       "active_type:true": { 

        ".validate": "(data.val() == null) || (data.isString() && (data.val().length == 0))" 
       } 
      } 
     } 
    } 

规则,但我想避免,如果没有找到父

+0

你的意思是防止在“Misters”下添加和更新新孩子的规则? – Wilik

回答

1

基本上会发生什么事是你写操作如果重新创建删除“vWZ55LGiraaIErIiiVN4NVQc6Eh1”我理解正确。

所以我会做这样的事情:

{ 
    "rules": { 
     ".read": true, 
    ".write": "auth != null", 
    "Misters": { 
     ".write" : "root.child('Misters').hasChild(<Misterif>)" 
     "$Misterid": { 
      "active_type:true": { 

       ".validate": "(data.val() == null) || (data.isString() && (data.val().length == 0))" 
      } 
     } 
    } 
} 
+0

是的,你理解正确吗 – Elsunhoty

+0

我会试试看,并告诉你结果 – Elsunhoty

1
  1. 存储所有添加$ Misterid在一个名为MistersAdded新节点。这可以通过自动使用云功能进行
  2. 添加以下

规则这包括将在MistersAdded地图查看是否曾经创建了它存在的()方法。如果您希望能够让用户移除地图,请添加'|| data.val()== null'在写入规则后面。

{ 
    "rules": { 
     ".read": true, 
     ".write": "auth != null", 
     "Misters": { 
      "$Misterid": { 
       "active_type:true": { 
        ".write": !root.child('MistersAdded').child($Misterid).exists() 
        ".validate": "(data.val() == null) || (data.isString() && (data.val().length == 0))" 
       } 
      } 
     } 
    } 
1

你真的想在“规则”中做到吗?这意味着你不能选择性地应用逻辑。我会建议以编程方式进行。

DatabaseReference mDatabase = FirebaseDatabase.getInstance(); 
    rootRef = mDatabase.child("vWZ55LGiraaIErIiiVN4NVQc6Eh1"); 
    addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     void onDataChange(DataSnapshot snapshot) { 
     if (snapshot.exists()) { 
      // run some code here if node exists 
     } else { 
      // run some code here if node does not exist 
     } 
     } 
    }); 

我希望有帮助。这样做将意味着您不仅可以进行验证,还可以通知用户并执行UI操作。