我正在开发一个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,然后代替我的用户来控制。