Настройка правил безопасности базы данных Firebase для простого приложения - PullRequest
0 голосов
/ 09 февраля 2019

Я использую 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 
};

1 Ответ

0 голосов
/ 11 февраля 2019

Я не понимаю, что вы имеете в виду, что только используемые пути / переменные Firebase могут быть обновлены?Но если вы не используете аутентификацию, как вы различаете, какие пользователи могут получить доступ к этому значению, а какие пользователи не могут?

...