限制可以写入的列

时间:2015-11-12 12:15:30

标签: php firebase firebase-security firebase-realtime-database

我使用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 个答案:

答案 0 :(得分:2)

+1使用Bolt!

您需要拥有与您的应用程序不同的PHP服务器权限。

如果您信任您的PHP服务器,您可以在其上存储Firebase的密钥。然后,您可以使用该自定义令牌进行身份验证,它将为您提供对Firebase数据库的完全访问权限。

但是,如果您不想要那么多功能,则可以生成仅具有您指定的特定权限的自定义令牌。

查看有关自定义登录的文档。 https://www.firebase.com/docs/web/guide/login/custom.html