2015-11-12 2 views
2

Я создал правило, используя the Firebase Bolt compiler.Ограничение столбцов, которые можно записать

{ 
    "rules": { 
     "users": { 
      "$user_id": { 
      ".validate": "newData.hasChildren(['settings', 'provider', 'email', 'privilege_type', 'address_city', 'address_state', 'dt_created', 'dt_updated'])", 
      "settings": { 
      ".validate": "newData.val().length > 0 && newData.val().length < 1000" 
.... 
      ".read": "auth != null && auth.uid == $user_id", 
      ".write": "auth != null && auth.uid == $user_id" 
     } 
     } 
    } 
    } 

И я тестировал с PHP скрипт

<?php 
require_once ('vendor/autoload.php'); 

const DEFAULT_URL = 'https://MYAPP.firebaseio.com/'; 
const DEFAULT_TOKEN = 'MYTOKEN'; 
const DEFAULT_PATH = '/users'; 

$firebase = new \Firebase\FirebaseLib(DEFAULT_URL, DEFAULT_TOKEN); 

// --- storing an array --- 
$test = array(
     "foo" => "bar", 
     "i_love" => "lamp", 
     "id" => 42 
); 
$dateTime = new DateTime(); 
$firebase->set(DEFAULT_PATH . '/' . $dateTime->format('c'), $test); 

// --- storing a string --- 
$firebase->set(DEFAULT_PATH . '/name/contact001', "John Doe"); 

// --- reading the stored string --- 
$name = $firebase->get(DEFAULT_PATH . '/name/contact001'); 

var_dump($name); 

Таким образом, данные были введены

{ 
    "2015-11-12T12:46:51 01:00" : { 
    "foo" : "bar", 
    "i_love" : "lamp", 
    "id" : 42 
    }, 
    "2015-11-12T12:48:27 01:00" : { 
    "foo" : "bar", 
    "i_love" : "lamp", 
    "id" : 42 
    }, 
    "name" : { 
    "contact001" : "John Doe" 
    } 
} 

Мой вопрос (извините, если это глупый вопрос).

Я пытаюсь ограничить столбцы, которые могут быть записаны с помощью приложения, в соответствии с правилами ограниченного (

".validate": "newData.hasChildren(['settings', 'provider', 'email', 'privilege_type', 'address_city', 'address_state', 'dt_created', 'dt_updated'])" 

Но PHP скрипт может писать и создавать различные столбцы.

Где моя ошибка?

+1

Перекрестная почта: https://groups.google.com/forum/#!topic/firebase-talk/FZ4JMYB_mFo –

+0

Благодарим вас за просмотр текста. @david –

+0

Извините за повторяющийся вопрос, мой сотрудник опубликовал тот же вопрос в группах google. Только что видел, он не сказал мне. @FrankvanPuffelen –

ответ

2

+1 для использования Болта!

Вы должны иметь разные разрешений для вашего PHP-сервера, чем ваше приложение.

Если вы используете сервер PHP, то вы можете хранить секретный ключ для своей Firebase. Затем вы можете выполнить аутентификацию с помощью этого пользовательского токена, и он даст вам полный доступ к базе данных Firebase.

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

Ознакомьтесь с документацией по пользовательскому логину. https://www.firebase.com/docs/web/guide/login/custom.html

+0

Hum ... Я понимаю ... спасибо за объяснение. –