2017-08-01 90 views
1

我有沿着這條線的東西火力結構 -火力地堡規則,以防止刪除

root { 
groups { 
    gid: { //group ID 
     authid: ... //group creator's uid 
     members: { //uid of members 
      ... 
     } 
     posts: { 
      ... //posts ID 
     } 
    } 
    } 
} 

我想這些功能 -

  1. 任何用戶都可以創建新組。這意味着我需要爲每個授權的人授予對「/ groups /」的寫入權限。但是它們不應該將null設置爲整個節點。所以,我可以做到這一點".write":"(!data.exists() && auth.uid != null) || (data.exists() && newData.exists()"
  2. 只有作者可以刪除一個組。這意味着我需要 賦予作者將個別組節點設置爲null的權限。這是我卡住的部分。因爲較淺的規則會覆蓋較深的規則。所以,如果我只是寫

    「組」:{ 「$ GID」:{ 」 .WRITE 「:」 newData.exists()& & data.child( 'AUTHID')VAL()=! == auth.uid「 } }

    這將被忽略。

  3. 我不希望任何人,甚至作者將null設置爲組中的單個節點。這意味着作者可以刪除整個組,但不是說,成員節點

回答

1

現在您要求在寫入操作後沒有數據。

你想要什麼,要麼沒有數據

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

線:

  1. 允許由業主刪除。
  2. 允許任何成員更新(假定所有者也是成員)。
  3. 允許任何人創建,只要他們使自己的所有者)。
+1

我要求任何人都可以創建一個組。誰創建一個團體將成爲所有者。但是,並非每個人都可以更新該組。只有會員可以更新,但只有「帖子」節點 –

+0

這些規則不是什麼?我可能錯過了某些東西,在這種情況下,獲得幫助的最佳方式是顯示不符合要求的操作的代碼。 –

+0

我已更新該問題。我刪除了帖子部分和成員部分 –