#javascript #firebase #firebase-security
# #javascript #firebase #firebase-безопасность
Вопрос:
Как я могу ограничить доступ на запись к свойству объекта в Firebase сеансу браузера, который его создал ref.push()
? Я хочу, чтобы все клиенты имели доступ на чтение к дочерним /buttonClicksByBrowserSession
элементам, как я делаю в правилах безопасности ниже, и я хочу, чтобы клиенты могли отправлять дочерние /buttonClicksByBrowserSession
элементы и редактировать их, но я хочу, чтобы редактирование этого дочернего элемента было запрещено после обновления браузера.
Мои правила безопасности Firebase:
{
"rules": {
".read": false,
".write": false,
"buttonClicksByBrowserSession": {
".read": true,
"$autoGeneratedID": {
".write": "newData.isNumber() amp;amp; (data.val() == null amp;amp; 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:
Используйте анонимный вход в систему, который позволяет вам назначать пользователям уникальный идентификатор для каждого сеанса, который может использоваться в правилах безопасности.
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() amp;amp; newData.val() === (data.val()||0) 1"
}
}
Ответ №2:
Для этой функциональности я думаю, что я бы выполнил простой выход из системы / вход в систему при инициализации страницы — получал новый идентификатор пользователя при каждом обновлении.
Затем сохраните данные с идентификатором пользователя в качестве последнего ключа с правилом для ограничения записи пользователю с этим идентификатором…