[英]Firebase Realtime Database newData Rules
我正在為反映 n2n 關系的幾個表創建一些規則。 下面是我用來更新數據庫的代碼:
// Prepara alterações no BD
HashMap<String, Object> dadosUpdate = new HashMap<>();
String idCurrUser = userManager.getCurrentUser().getId();
// Obtem nova chave para registros novos
if (isNew) {
String newCondominioId = FirebaseDBManager.getNewId("condominio");
condominioSel.setId(newCondominioId);
}
// Usuarios_Condominios
dadosUpdate.put("/usuarios_condominios/" + idCurrUser + "/" + condominioSel.getId() + "/ehAdmin/", true);
dadosUpdate.put("/usuarios_condominios/" + idCurrUser + "/" + condominioSel.getId() + "/ehSindico/", true);
dadosUpdate.put("/usuarios_condominios/" + idCurrUser + "/" + condominioSel.getId() + "/ehColaborador/", true);
// Condominios_Usuarios
dadosUpdate.put("/condominios_usuarios/" + condominioSel.getId() + "/" + idCurrUser + "/ehAdmin/", true);
dadosUpdate.put("/condominios_usuarios/" + condominioSel.getId() + "/" + idCurrUser + "/ehSindico/", true);
dadosUpdate.put("/condominios_usuarios/" + condominioSel.getId() + "/" + idCurrUser + "/ehColaborador/", true);
return fbDB.updateChildren(dadosUpdate);
這是我在 Firebase 設置的規則:
{
"rules": {
"usuarios_condominios": {
".read" : "auth.uid != null",
"$idUsuario": {
".write": "(auth.uid === $idUsuario) || (root.child('usuarios').child(auth.uid).child('ehAdmin').val() == true)"
}
},
"condominios_usuarios": {
".read" : "auth.uid != null",
"$idCondominio": {
".write": "(auth.uid != null && newData.child('condominios_usuarios').child($idCondominio).child(auth.uid).child('ehAdmin').exists())"
}
}
}
}
出於某種原因我找不到,最后一條規則阻止我保存數據:
"newData.child('condominios_usuarios').child($idCondominio).child(auth.uid).child('ehAdmin').exists()"
請幫助我了解我做錯了什么。
newData
變量包含在其上定義規則的節點的值,因為如果寫入操作成功/被允許,它將在寫入操作之后存在。
所以,你不需要自己從根開始建立路徑, newData
已經指向了當前節點。 我認為這意味着你需要:
newData.child(auth.uid).child('ehAdmin').exists()
如果將來您想檢查與根不同的分支中的節點,則必須調用parent()
以從當前節點到達樹的根,然后從那里使用child
調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.