2017-12-30 58 views
0

내 응용 프로그램을 클라우드 기반 데이터베이스로 이동하는 중입니다. 현재 나는 모든 것을 사용자의 장치에 sqllite로 저장했습니다.Firebase Firestore의 사용자 액세스 관리

데이터가 클라우드에 업로드되면 사용자가 두 개인 간 동기화를 위해 다른 사용자에게 개인 데이터베이스에 대한 액세스 권한을 부여 할 수 있습니다.

사용 케이스 :

사람 한 계정을 생성하고 데이터를 저장하기 시작합니다. 사람 1은 사람 2에게 자신의 계정에 대한 액세스 권한을 부여하려고합니다. 사용자 2는 로그인하고 사용자 2는 사용자 1의 저장소에 대한 액세스 권한을 갖고 두 클라이언트 응용 프로그램은 동일한 계정에 로그인 한 것처럼 동일한 소방 목록에 동기화됩니다.

구조를 구성하는 가장 좋은 방법은 무엇입니까? 보조 사용자가 다른 사람의 개인 문서에 액세스 할 수 있도록 허용하기는 쉽지만 클라이언트 응용 프로그램이 보조 사용자가 액세스 할 수있는 문서를 쉽게 결정할 수있는 방법으로 어떻게해야합니까? 다른 사용자 액세스 맵 모음을 유지해야합니까? 어떻게 구성해야합니까?

답변

0

내가 생각할 수있는 가장 쉬운 방법은 현재 자신의 서버에서 Firebase의 Admin SDK를 사용하여 해당 노드에 액세스해야하는 대상 사용자에게 사용자 정의 클레임을 부여하는 것입니다.

의가 있다고 가정 해 봅시다

다른 사람의 노드 부여가 액세스 얻을 것이다 액세스를

UID2 = 사용자에게 부여하려는

UID1 = 사용자 여기

난 그냥 쓰기에 대해 당신에게 아이디어를 줄 것이다 규칙, 당신은 읽을 수있는 공개 또는 같은 또는 당신이 좋아할 수있다

따라서 UID1 노드에 대한 규칙은 다음과 같을 수 있습니다 (사용자의 구조가 사용자의 요구 사항 일 수 있음).

match /users/{UID1}/{allPaths=**}{ 

    allow write: if request.auth.uid == UID1 || request.auth.token.allowedAccesToId == UID1 

} 

이 따라서 기본 사용자 기반 규칙의 조합과 사용자 지정 클레임 규칙입니다

여기 allowedAccesToId은 관리자 SDK를 다음과 같이 (JAVA)를 통해 추가 사용자 지정 클레임입니다 :

Map<String, Object> claims = new HashMap<>(); 
claims.put("allowedAccesToId", UID1); 
FirebaseAuth.getInstance().setCustomUserClaimsAsync(UID2, claims).get(); 

당신은 이제 여기에 다른 서버 측 언어로

https://firebase.google.com/docs/auth/admin/custom-claims

그것을이됩니다 수행하는 방법을 볼 수 있습니다 기본 시간 인 1 시간 동안 UID2 사용자에게 액세스 권한을 부여하려면 더 이상 사용자 정의 토큰의 지속 기간을 사용자 정의 할 수 있다고 생각하지 마십시오.

일단 사용자가 취소하려면 allowedAccesToId의 사용자 지정 클레임 값을 임의의 노드와 일치하지 않는 임의의 값 xx로 설정하십시오. 이렇게하면 UID2 사용자는 user1의 노드에 더 이상 액세스 할 수 없습니다.