如何将对Firebase中对象属性的写入权限限制为使用ref.push()
创建它的浏览器会话?我希望所有客户都能像我在下面的安全规则中对/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);
});
答案 0 :(得分:1)
利用anonymous login,允许您为用户分配可在安全规则中使用的每会话唯一ID。
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"
}
}
答案 1 :(得分:0)
对于此功能,我认为我在页面初始化中进行了简单的注销/登录 - 每次刷新都会获得一个新的用户ID。
然后使用userid作为最终密钥保存数据,并使用规则限制对具有该ID的用户的写入...