2015-12-07 2 views
1

мне нужна помощь с этим Firebase правило, у меня есть ребенок, где я хранить метку времени,Как проверить достоверность servertimestamp меньше определенного значения в Firebase?

enter image description here

И мне нужно только разрешить запись в другое место на firebase, когда метка времени сервера меньше, чем хранится на дату Дата -> дата. Я не уверен, как это сделать, писать или проверять, или как заставить правило читать определенное значение в самой Firebase.

{ 
    "rules": { 
     "test":{ 
       ".read" : false, 
      this-->".write": "now < root.child('date\Date')", 
     or this-->".validate": "now < root.child('date\Date')" 
     } 
    } 
} 

UPDATE

Я могу читать с места, в настоящее время, но проблема литья значение для comarison. Я попробовал (int) (Integer) parseInt() Number() и все они не удалось

Я нахожусь на правильном пути или должен быть сделан по-другому?

UPDATE 2 мне удалось написать приемлемое правило -Вот не продуцировать error-, но он не работает, здесь

{ 
    "rules": { 
     "test":{ 
      ".write": "now < root.child('date/Date').val()", 
      ".read" : false 
     } 
    } 
} 

Любые предложения?

UPDATE 3

На самом деле это не работает хорошо, я думаю, что это сравнение количества поступающих из «теперь» функции в строку вступления формы в root.child.val, поэтому правило всегда было ложный.

мне удалось обойти его, поставив решение здесь только в случае, если кто-то нуждается в этом

"rules": { 
     "test":{ 
      ".write": "now + ' ' < root.child('date/Date').val() + ' '", 
      ".read" : read 
     } 
    } 

Поэтому в основном я добавил (+ ' «), чтобы теперь преобразовать его в строку, и добавил так же, как и для того, чтобы сделать обе строки по сравнению с той же длиной.

ответ

3

Правила безопасности могут считывать данные в базе данных Firebase. Вы можете проверить временную метку, если вы комбинируете использование переменной now с переменной root.

{ 
    "rules": { 
     "test":{ 
      ".write": "now < root.child('date').child('Date').val()", 
      ".read" : "now < root.child('date').child('Date').val()" 
     } 
    } 
} 

Тогда в вашем коде, вы должны слушать отмены обратного вызова:

var ref = new Firebase("<my-firebase-app>/test"); 
ref.on('value', function(snap) { 
    console.log(snap.val()); 
}, function(error) { 
    // if permission is denied the error will log here 
    console.error(error); 
}); 

Check out the Firebase API reference for more info.

Кроме того, с помощью имитатора в Firebase App Dashboard поможет вам проверить свои правила:

enter image description here

+0

Еще раз спасибо , вы очень помогаете, очень цените это. Не применяются ли правила при использовании консоли? Я все еще могу писать в том месте, когда я использую консоль Chrome, даже если я установил ее для записи: false. –

+0

Ах, вы пишете с консоли с открытой панелью Firebase App. Да, правила там не применяются, потому что вы админ. Панель Firebase App Dashboard - это веб-приложение с правами администратора для базы данных Firebase.Когда вы используете консоль и создаете ссылку, вы получаете локальные права веб-приложения, которое является администратором. Попробуйте получить доступ к данным в режиме инкогнито или использовать симулятор. –

+0

Большое спасибо :) –

Смежные вопросы