2017-03-14 1 views
1

계약자와 고용주 간의 계약 응용 프로그램을 작성 중입니다. 저는 이제 계약 그 자체에 대해 연구하고 있습니다.Firebase 규칙 - 공유 된 사용자 계약 및 사용자 별 계약

메시징 앱을 만드는 것과 해피 - 화가 - 놀란 예제 firebase 앱과 같은 게임의 관점에서 생각했습니다.

지금 계약 노드 /contracts/입니다. 계약서에는 2 명의 사용자 만있을 수 있습니다. 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.

나는이 더 나은 또는 쓰기 규칙을 작성하는 것은 방지하기 위해 제공하는 고용주는 모든 계약자 데이터에 액세스 구조 중 하나에 대해 갈 수 있습니까?

답변

0

좋아요, 그래서 Firebase 클라우드 기능에 뛰어 들었습니다. 이 문제를 해결하는 가장 좋은 방법은 클라이언트 쪽에서 데이터를보다 안전하게 유지할 수있는 서버 쪽입니다. 그것이 작동하는 방법

다음
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를 가져올 수 있습니다. 그렇게하면 사용자 정보에 따라 모든 사용자 계약을 깔끔하게 저장할 수 있습니다.

이렇게하면 사용자에게 계약 정보를 보여줘야 할 때 편리합니다. 다음 단계는 계약을 갱신하고 동시성을 유지 보수하는 것입니다.