2017-12-04 1 views
1

JS 어플리케이션의 Firebase 실시간 DB 보안.Firebase 익명 데이터 보안

모든 비밀번호 인증 사용자에게 읽기 권한을 허용하고 있습니다. 그런 다음 다른 모든 유형 (익명, 내 구성표 당)에 대해 특정/번들 /에 대해서만 읽기를 허용하려고합니다.

{ 
    "rules": { 
     ".read": "auth != null && auth.provider == 'password'", // working! 
     "bundles": { 
      "$bundle": { 
       ".read": "data.child('anonymous').val() == true", // not working 
      } 
     }, 
    } 
} 

그리고/번들 - -

내가 기대
"-L-2BbIkAg6J9WPMaJpJ": { 
    "anonymous": true, 
    "more_data": "data_1" 
    }, 
    "-L-UHBr45eEUHGwsPWqq": { 
    "anonymous": false, 
    "more_data": "data_2" 
    } 

은 로그인 한 경우 익명으로, 첫 번째 묶음 볼 수 있지만, 대신 내가 오류에서 얻을

은 규칙입니다 FB - "/ bundles에 permission_denied".

+0

AFAIK Firebase 규칙은 데이터를 필터링하지 않습니다. 'ref.child ('bundles'). once ('value')'와 같은 쿼리를하려고합니까? – jaye

+0

필터링으로 볼 수 있지만 https://firebase.google.com/docs/database/security/securing-data#structuring_your_rules에서 아이디어를 가져 왔습니다. 특히 - "규칙": { "메시지": { "$ 메시지": "data.child ('타임 스탬프') : {마지막 10 분 // 메시지 만 ".read "를 읽을 수 있습니다 .val()> (지금 - 600000) ", } } } – GuyC

답변

1

/bundles 위치에 액세스하려고 시도하기 때문에 .read이 실패합니다. 대신 당신이 직접 특정 번들을 조회 할 경우, 전달합니다 :

// read denied 
ref.child('bundles').once('value') 

// read allowed 
ref.child(`bundles/-L-2BbIkAg6J9WPMaJpJ`).once('value') 

당신은 중포 기지 문서의 this section에 명시된 바와 같이, 중포 기지 규칙을 통해 데이터를 필터링 할 수 없습니다. 예를 들어 스키마를 업데이트하고 익명 번들에 별도 노드를 제공하는 것이 좋습니다. 예 :

{ 
    "rules": { 
    ".read": "auth != null && auth.provider == 'password'", 
    "anonymousBundles": { 
     ".read": "auth != null" 
    } 
    } 
}