簡體   English   中英

Firebase 實時數據庫新數據規則

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM