如何限制对Firebase实时数据库中数据子集的访问?

时间:2019-04-05 16:47:42

标签: firebase firebase-realtime-database firebase-authentication firebase-security-rules

我正在开发一个Android应用,该应用通过FirebaseAuth对用户进行身份验证。

我的用户必须在共享首选项中设置控制器盒的ID。完成后,该应用程序便能够(并被授权)在实时数据库中的此特定控制器盒上读取/写入数据。

目前,我不知道如何根据用户ID和控制器框的ID定义安全规则。

我的数据库如下:

controllers
    CID1
        data
    CID2
        data

目前,用户尚未在数据库中实现。我的想法是为一个控制器分配一个到多个用户ID(由Firebase Auth生成的ID),如下所示:

controllers
    CID1
        data
        members
            UID1
            UID2
    CID2
        data
        members
            UID3
            UID4

在此示例中,具有UID3和4的用户应只能访问控制器CID2。 因此,我需要一个安全规则,仅授权对相关CID进行读/写。我想像这样的东西:

"rules":{
    "controllers":{
      "$controller":{
        ".write": "$auth.uid === $controller.child('members').child($auth.uid)..."
      }
    },

但是,如果我这样做,我的用户将无法声明自己应该访问的控制器ID。

我是否需要首先创建一个包含用户CID声明的用户节点?

controllers
    CID1
        data
        members
            UID1
            UID2
    CID2
        data
        members
            UID3
            UID4

users
    UID1
       CID1
    UID3
       CID2
...

更新: 让我们尝试通过用户故事为上述问题赋予更多含义。假设我是控制器的供应商;我用唯一的序列号(CID)调度控制器。作为供应商,我将控制器添加到数据库中(控制器> CIDx和默认数据结构)。用户收到控制器后,将安装该应用并通过其Google帐户进行身份验证。然后,用户将输入唯一的序列号(CID)以连接到控制器。不同的用户(经过身份验证,这是前提条件)可以连接到同一控制器。用户应能够从控制器读取信息(在数据库中读取)并向控制器提交订单(在数据库中写入)。

我想避免恶意用户解析完整的数据库,然后检索所有控制器唯一的ID,然后代替我的用户来控制。

0 个答案:

没有答案