2017-10-25 2 views
0

모든 사용자 트랜잭션 로그를 저장하려고합니다. 예를 들어 사용자가 무언가를 생성, 업데이트 또는 삭제할 때 로그는 '거래'에 저장됩니다.Firebase 보안 규칙 (.write)

이 문제에 보안 규칙 (.write)을 쓰는 데 어려움이 있습니다.

예 : (userKey2)라는 사용자가 아래와 같이 (userKey1)라는 사용자 데이터를 업데이트하는 경우 :

{ "Users" 
    {"userKey1": 
     { "Name":"Mike", 
     "Age":"18", 
     "Location":"Sydney" } 
    } 
} 

또한이 "거래"

{ "Transactions" : 
    { "Key" : 
     { "Object" : "Users", 
     "DateTime: "2017-10-25 10:00:00", 
     "ObjectKey" : "userKey1", 
     "Type" : "Update", 
     "Who" : "userKey2" 
     } 
    } 
} 

내가 함께 중포 기지에 업데이트 명령을 보내 추가합니다. ("사용자"및 "거래"의 경우) 모든 사람 또는 모든 사람을 업데이트합니다.

"트랜잭션"에 대한 보안 규칙을 어떻게 (. 왜냐하면 나는 그것의 "Object"와 "ObjectKey"가없는 "Transactions"에 대한 어떠한 데이터 입력도 "Users"컬렉션에 실제로 존재하지 않기를 원하기 때문입니다.

하지만 내 예에서는 '사용자'컬렉션에서 확인할 수 없으므로 아직 내 예에서는 아무 것도 없습니다 (둘 다 다른 컬렉션의 새 데이터 임).

답변

0

Firebase 데이터베이스 트리거를 사용하여이 기능을 구현하는 것이 좋습니다. 클라이언트 측 응용 프로그램은 "사용자"노드에만 기록합니다. "사용자"노드 아래에서 데이터가 업데이트 될 때마다 실행되는 트리거를 만들 수 있습니다. 그 트리거는 "트랜잭션"노드에 추가 항목을 쓸 수 있습니다.

트리거 방식을 사용하면 사용자 아래에 실제로 존재하는 트랜잭션에만 데이터를 쓸 수 있습니다. 데이터가 사용자 아래에 추가 될 때만 트리거가 시작됩니다.

또한 Transactions에 대한 쓰기는 관리자 권한으로 실행되므로 트랜잭션 클라이언트 노드에 최종 사용자 권한을 부여 할 필요가 없습니다.

Here is the documentation on Firebase triggers.

+0

예 문서를 확인했습니다. 이것들은 제가 찾고있는 것입니다. 감사. –