2017-04-14 78 views
0

的JSON看起來是這樣的:enter image description here火力地堡刪除子權限被拒絕

我想刪除的孩子是[史蒂芬:UID]從user_lookup

這是代碼:

self.ref.child("user_lookup").queryOrderedByValue().queryEqual(toValue: user?.uid).observe(.value, with: { snapshot in 

          if snapshot.exists() { 

           print("I got it") 
           // remove [steven, uid] 

          } else { 

           print("Not found") 

          } 

我不知道如何刪除孩子,但我試圖鍵入removeValue,但我得到了Permission_denied

以下是規則:

`"user_lookup": { 
     ".read": "auth !== null", 
      ".write": "auth !== null && !data.exists()", 

     ".indexOn": [".value"], 

我認爲它是因爲「!data.exists()」但我不想重複數據,所以如何解決這個問題? 如何刪除孩子,任何幫助將不勝感激。

+0

如果數據已經存在,則您的規則非常明確地拒絕寫入操作。而不是用數據說出你不想要的東西,你能描述你做的**想要什麼嗎?例如:「我希望通過身份驗證的用戶能夠使用他們自己的UID編寫他們的名字並刪除他們的名字(使用他們自己的UID)。」 –

+0

請確保用戶已登錄 –

+0

@FrankvanPuffelen如果[name或uid]尚不存在,我希望auth用戶寫他們的名稱和他們的uid。就像我不能寫'史蒂文',因爲它已經爲另一個用戶存在,我想授權用戶刪除他們的名字與uid。 – Sam

回答

1

我認爲這可能是你想要什麼:

".write": " 
    (auth.uid === newData.val() && !data.exists()) || 
    (auth.uid === data.val() && !newData.exists()" 

第一個表達式或或允許用戶聲稱他們的名字,如果不存在了。第二個表達式允許刪除他們的聲明。

+0

感謝您的幫助!但它不工作,我甚至不能用模擬器寫任何東西https://i.gyazo.com/55b970896146430ff7e6c7a223fab44e.png – Sam

+0

如果我通過數據庫添加已經存在的名稱例如「賈斯汀」爲另一個uid uid將是更新,所以名稱被盜,我不希望發生這種情況,我希望每個用戶有不同的名稱,不會與其他用戶重複,並且每個用戶可以更新他的名稱與其他不存在的名稱,並且每個用戶都可以用他的數據庫中的uid刪除他的名字。它的用戶名系統,希望你得到它,並可以幫助我 – Sam

+0

你在截圖中寫的值是**不是** UID。它是一個包含UID的JSON對象。要獲得您的問題所在的結構,請將數據更改爲'「xx」'。 –