2017-03-14 29 views
1

私は請負業者と雇用主の間で契約しているアプリケーションに取り組んでいます。私は現在、契約自体に取り組んでいます。Firebaseのルール - 共有ユーザー契約とユーザー固有の契約

私はメッセージングアプリとHappy-Angry-Surprisedのfirebaseアプリのようなゲームを作成するという観点から考えました。

私が今契約しているノードは/contracts/です。契約には2人のユーザーしかいません。 2人がゲームをしたり、チャットしたりしているのと似ています。

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

請負業者と雇用者のための別のダッシュボードがあります。私は各タイプのユーザーに特定の契約を示すことができるようにしたい。

私は、ユーザーの両方のタイプが混在しているが、それぞれが、私は/users/uid/contracts/contractKey:true考えていた役割/users/role

を持って/users/ノードを持っています。

私は契約書が作成されたとき、これらは、各ユーザーに出て合流する記述します。

は、ここで実際の問題/質問です。しかし、雇用者はログインしたときに常に契約を開始/作成します。参加を書くには、ノードであるものとそうでないものを含む/ users/uidノードに書き込ませる必要があります。

これは、このデータを追加することができることです。/users/uid/contracts/contractKey:true.

すべての請負業者のデータへのアクセスをどのように私が行くことができるのいずれかの構造この良いか雇用を与える防ぐために、書き込みルールを書きますか?

答えて

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"を実行するイベントがトリガされます。

契約書に書かれたデータと契約IDを取得します。次に、Admin SDKを使用して、データのコピー先を参照することができます。契約者IDとイベントパラメータを使用して契約IDを取得できます。そうすれば、すべてのユーザー契約をユーザー情報の下にきちんと保存することができます。

これにより、ユーザーに契約情報を提示する必要がある場合に、より簡単に使用できます。次のステップでは、契約を更新して並行性を維持することができます。

関連する問題