【问题标题】:Firebase Rules - Shared User Contracts and User Specific ContractsFirebase 规则 - 共享用户合同和用户特定合同
【发布时间】:2017-03-14 23:12:02
【问题描述】:

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

我从创建消息应用和游戏(如 Happy-Angry-Surprise 示例 firebase 应用)的角度考虑了这一点。

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

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

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

我有一个 /users/ 节点,它混合了两种类型的用户,但每个用户都有一个角色 /users/role

我在想/users/uid/contracts/contractKey:true

这是实际的问题/问题:

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

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

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

【问题讨论】:

    标签: firebase firebase-authentication firebase-security


    【解决方案1】:

    好的,所以我开始使用 Firebase Cloud Functions,顺便说一句,这真是太棒了!处理此问题的最佳方法是服务器端,这样我可以在客户端保持数据更安全。

    这是我想出的:

    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。这样我就可以将每个用户的合同整齐地存储在他们的用户信息下。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多