Я использую Firebase для очень простой цели - просто для создания кнопки реального времени для WordPress, которая исчезает при нажатии.Там нет пользователей / аутентификация.
Как я могу создать правила безопасности, которые не позволяют кому-либо вмешиваться в работу базы данных, но позволяют кнопке работать?Простой способ, которым я знаю, как установить безопасность write": false
, но тогда кнопка не будет работать, поскольку переменные Firebase не могут быть изменены / обновлены. Документация , кажется, больше ориентирована на приложения с пользователями, но, похоже, упоминает возможность установки ограничений на чтение / запись / и т. Д. Для определенных путей.
Возможно, я смогу сделать так, чтобымогут быть обновлены только используемые пути / переменные Firebase?
var database = firebase.database();
//firebase queue
//**************
///timer fb
let timestamp;
let now = new Date().getTime();
let endTimeRef = firebase.database().ref("server");
let endTime;
let minutes;
let secondsDisplay;
let distance= endTime-now;
let buttonDisplay= document.getElementById("queue");
let timerDisplay = document.getElementById("timer_fb");
let message= document.getElementById("timer_div");
function displayTimer(){
minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
secondsDisplay= Math.floor((distance % (1000 * 60)) / 1000);
let s;
if (minutes >= 1 || secondsDisplay >= 1) {
if (minutes >= 1 && secondsDisplay >= 10) {
s = "Time Until Next Person: " + minutes + ":" + secondsDisplay;
} else if (minutes >= 1) {
s = "Time Until Next Person: " + minutes + ":0" + secondsDisplay;
} else {
s = "Time Until Next Person: " + secondsDisplay + "s";
}
} else {
s = "";
}
document.getElementById("timer_fb").innerHTML = s;
}
function setTimer() {
let interval = setInterval(function() {
now = new Date().getTime();
distance= endTime-now;
//update timer display
displayTimer();
if (distance <= 0) {
buttonDisplay.style.display = "block";
timer_div.style.display = "block";
document.getElementById("timer_div").innerHTML = "This session is open!";
clearInterval(interval);
timerState.set('off');
endTimeRef.set(0);
}
}, 1000);
}
//display timer
//state machine
let timerState = firebase.database().ref("timerState");
let timer;
timerState.on("value", function(snapshot) {
timer= snapshot.val();
if(timer == "on"){
buttonDisplay.style.display = "none";
message.style.display = "none";
endTimeRef.once("value", function(snap) {
let endStamp = snap.val();
console.log("stored button snap value check: ", snap.val());
now = new Date().getTime();
endTime= endStamp +100000;
distance= endTime-now;
//show display right after button is pressed
displayTimer();
setTimer();
});
}
});
//********
//*****on click handler
document.getElementById("queue").onclick = function() {
//hide button
buttonDisplay.style.display = "none";
message.style.display = "none";
//set time button comes back
now = new Date().getTime();
endTime= now + 100000;
endTimeRef.set(now);
//firebase state machine
timerState.set('on');
//setInterval handler, used for timer/countdown
//need to wrap interval in function so that it can be reused
};