2014-02-23 21 views
1

比方說,我有文章的集合:唯一的IP寫權限火力地堡收集

https://example.firebaseio.com/articles/$key 

而且我想一個viewCountercurrentUsersCounter孩子添加到articles

https://example.firebaseio.com/articles/$key/viewCounter 
https://example.firebaseio.com/articles/$key/currentUsersCounter 

我執行一個功能隨時隨地用戶已滾動到下一篇文章:

var currentArticle = function(key){ 
    //key == index of the article 
    //This is where I want to increment the `viewCounter` and `currentUsersCounter` 
} 

很顯然,我不希望任何人寫什麼更那麼這兩個孩子。

  • 如何在我的安全規則擴大目前(黑列出所有寫操作)到白名單隻爲這些特定的集合寫?

  • 我怎麼會限制寫入唯一的IP地址,在我的安全規則,這些白名單的集合? (如果可能)

目前黑列出所有寫道:

{ 
    "rules": { 
    ".read": true, 
    ".write": "auth.email == '[email protected]'" 
    } 
} 
+0

使用服務器側代理隱瞞火力URL和用戶活動執行無限認證/驗證。 – dandavis

+0

@dandavis是的,如果它歸結爲,我想這就是我必須要做的。希望能夠通過Firebase API利用某種「魔術」輔助功能。 –

+0

你可以用自己的規則將這些信息放在不同的集合中嗎? – dandavis

回答

4

不能的方式,將保護數據的完整性(即確保做到這一點的計數實際上是準確的),因爲如果您授予對這些字段的寫入訪問權限,則客戶端可以寫入它想要的任何值。

你可以,但是,通過在安全規則中使用變量提供了只有那些特定的孩子顆粒狀讀/寫訪問:

{ 
    "articles": { 
    "$key": { 
     "viewCounter": { 
     ".write": true, 
     ".validate": "newData.isNumber() && newData.val() == data.val() + 1" 
     }, 
     "$other": { 
     ".write": "auth.email == '[email protected]'" 
     } 
    } 
    } 
} 

這是不可能做基於IP地址的任何過濾。您需要使用來自受信任的服務器代碼的祕密來執行該操作,正如評論中所建議的那樣。