Firebase规则 - 共享用户合同和用户特定合同

时间:2017-03-14 23:12:02

标签: firebase firebase-authentication firebase-security

我正在为承包商和雇主之间的合同应用程序做准备。我现在正在处理合同本身。

我从创建消息传递应用程序和像Happy-Angry-Surprised示例firebase应用程序这样的游戏的角度考虑过这个问题。

我现在拥有的是合约节点/contracts/。合同中只能有2个用户。就像2个人在玩游戏或聊天一样。

/contracts/contractKey/employerID
/contracts/contractKey/contractorID
/contracts/contractKey/metadata

承包商和雇主有一个单独的仪表板。我希望能够向每种类型的用户展示他们的特定合同。

我有一个/users/节点,其中包含两种类型的用户,但每个节点都有一个角色/users/role

我在考虑/users/uid/contracts/contractKey:true

以下是实际问题/问题:

创建合同时,我会将这些连接写入每个用户。但是,雇主总是在登录时启动/创建合同。为了编写连接,我必须让他们写入/ users / uid节点,该节点将包含一个节点和一个节点。 / p>

这是为了能够添加此数据:/users/uid/contracts/contractKey:true.

我怎样才能更好地构建这个或编写写规则以防止雇主访问所有承包商数据?

1 个答案:

答案 0 :(得分:0)

好吧,所以我参加了Firebase Cloud功能,顺便说一句,这真是太棒了!处理此问题的最佳方法是服务器端,这样我就可以在客户端保持数据的安全性。

以下是我提出的建议:

exports.fanContract = functions.database.ref('/contracts/{contract_id}/')
.onWrite(event => {
  // Grab the current value of what was written to the Realtime Database.
  const original = event.data.val();
  const contractorID = original.contractorID;

  console.log('moving', event.params, original);

  // You must return a Promise when performing asynchronous tasks inside a Functions such as
  // writing to the Firebase Realtime Database.

  return admin.database().ref(`/users/${contractorID}/contracts/${event.params.contract_id}`).set(original);
});

以下是它的工作原理。只要数据库上的写事件发生在/ contracts / contract_id节点上,就会触发一个事件来运行firebase函数" fanContract。"

它将获取已写入的数据和合同中的contractID。然后我们可以使用Admin SDK来确定将数据复制到的位置。我们可以使用承包商ID和事件参数来获取合同ID。这样我就可以整齐地将每个用户的合同存储在他们的用户信息下。

当我需要向用户提供合同信息时,这将使生活更轻松。下一步是能够更新合同并保持并发性。