2016-07-04 1 views
3

그룹별로 Firebase Storage의 경로에 대한 업로드를 제어하는 ​​방법이 있습니까? 예를 들어 특정 경로에만 업로드 할 수있는 위치 또는 팀을 업로드 할 수있는 관리자 그룹이 있습니다.맞춤 인증을 사용하지 않고 firebase storage에 그룹 액세스 생성

+0

[보안 사용자 데이터 가이드] (https://firebase.google.com/docs/storage/security/user-security) (그룹 접근 방식 언급), [사용자 그룹, 인증 클레임 및 맞춤 토큰] (https://groups.google.com/forum/#!searchin/firebase-talk/groups$20auth$20claims%7Csort:relevance/firebase-talk/77i9CRlwg88/iQsE78CbGQAJ) 토론 그룹. – Kato

답변

7

조금만 둘러 본 후 준비된 답을 찾지 못해서 지금까지 가지고있는 것을 올릴 것입니다. 이 작업을 수행하는 다른 (더 나은) 방법이 있는지 알면 좋습니다.

다른 서버를 사용하지 않으려 고하므로 사용자 지정 인증 토큰이 부족합니다. 그러나 request.auth.uid는 저장 영역 규칙에서 사용할 수 있습니다. uid 속성은 Auth 영역에 정의 된 사용자 중 하나와 일치합니다. request.auth.uid가 정의한 그룹에 있는지 확인하는 저장 규칙에 함수를 작성해야합니다.

파이어베이스 저장 규칙에는 고유 한 구문이 있습니다. 그것은 자바 스크립트처럼 보이지만 그렇지 않습니다. 함수를 정의 할 수는 있지만 함수 내에서 var을 선언 할 수는 없습니다. 또한 자바 스크립트와 같은 메소드를 사용할 수 있습니다. 나는 VAR을 정의하려고 또는 내가 .indexOf를 사용할 때 항상 "무단"돌아 왔을 때

function isAdmin() { 
    return ["value","list"].indexOf(request.auth.uid) > -1; 
} 

service firebase.storage {...} 

어느 규칙 편집기 오류를 던졌다 :

는 예를 들어, 내가 먼저 실패 다음 시도했다.

다음은 나를 위해 일했다.

function isAdmin() { 
    return request.auth.uid in { 
    "yaddayadddayaddUserIDKey":"User Name1" 
    }; 
} 
function isSomeOtherGroup() { 
    return request.auth.uid in { 
    "yaddayaddaSomeOtherUID":"User Name2", 
    "YaddBlahBlahUID":"User Name3" 
    }; 
} 

service firebase.storage { 
    match /b/<your bucket here>/o { 
    match /{allPaths=**} { 
     allow read, write: if isAdmin(); 
    } 
    match /path/{allPaths=**} { 
     allow read, write: if isSomeOtherGroup() || isAdmin(); 
    } 
    } 
} 
+0

방금이 솔루션을 시도했지만 어떤 이유로 작동하지 않습니다. 도중에 발견 한 다른 경고가 있었습니까? –

+0

전자 메일 주소 인증만을 사용하고있었습니다. 나는 구글이나 페이스 북의 인증을 시도하지 않았다. – ecalvo

4

@ ecalvo의 답변에 대한 평판이 충분하지 않습니다. 그래서 나는 대답을 추가하고있다. isAdmin() 함수는 다음과 같은 목록을 제공 할 수있다 : 구현

function isAdmin() { 
    return request.auth !=null && request.auth.uid in [ 
     "uidAdmin1", 
     "uidAdmin2", 
     "uidOfOtherAdminsAsCommaSeparatedStrings" 
    ]; 
} 

나머지 @ecalvo의 응답에서 차용 할 수있다. 나는 그것이 더 분명하다고 느낀다. @ecalvo의 대답에서 나는 UID 만 비교할 때 왜 사용자 이름을 주어야하는지 혼란스러워했습니다.

관련 문제