2014-06-21 26 views
0

如何限制對使用ref.push()創建它的瀏覽器會話的Firebase中的對象屬性的寫訪問權限?我希望所有客戶都可以像下面的安全規則那樣對/buttonClicksByBrowserSession的子項進行讀取訪問,並且我希望客戶能夠將子女推送到/buttonClicksByBrowserSession並對其進行編輯,但是我希望在瀏覽器後禁止對該子女進行編輯刷新。Firebase:限制孩子對創建它的瀏覽器會話的寫權限

我的火力地堡安全規則:

{ 
    "rules": { 
     ".read": false, 
     ".write": false, 
     "buttonClicksByBrowserSession": { 
      ".read": true, 
      "$autoGeneratedID": { 
      ".write": "newData.isNumber() && (data.val() == null && newData.val() === 1 || newData.val() - data.val() === 1") 
      } 
     } 
    } 
} 


我的JS:

var fbRef = new Firebase('https://fbKey.firebaseIO.com/buttonClicksByBrowserSession'); 
var numClicksRef = fbRef.push(); 
var numClicks = 0; 

button.addEventListener('click', function() { 
    numClicksRef.set(++numClicks); 
}); 

回答

1

利用anonymous login,它允許你指定用戶每會話,可以在安全規則中使用的唯一標識。

var fb = new Firebase(URL); 
var auth = new FirebaseSimpleLogin(fb, function(err, user) { 
    if(err) throw err; 
    if(user) init(user); 
}); 

function init(user) { 
    fb.child('buttonClicksByBrowserSession/'+user.uid).transaction(function(currValue) { 
     return (currValue||0)+1; 
    }); 
} 

auth.login('anonymous', {rememberMe: false}); 

安全規則:

"buttonClicksByBrowserSession": { 
    ".read": true, 
    "$autoGeneratedID": { 
     ".write": "auth.uid === $autoGeneratedID", 
     ".validate": "newData.isNumber() && newData.val() === (data.val()||0)+1" 
    } 
} 
0

對於這個功能,我想我會做一個簡單的註銷/登錄頁面初始化 - 每刷新一次獲取一個新的用戶標識。

然後與用戶ID保存數據作爲最終的關鍵,用規則來限制寫入與ID的用戶...