본문 바로가기
CodeLab/Firebase

Firebase Web 채팅앱 만들기 - Realtime Database 권한 설정

by 블리드카가 2017. 12. 4.
728x90





여기까지 따라오시느라 수고하셨습니다. 코드는 완성되었습니다.  앞서도 언급되었지만, Firebase Realtime Database특성상 권한 설정은 무척 중요합니다. 특히나 웹의 경우는 서버의 주요 로직들이 클라이언트에서 드러나기 때문입니다.

Realtime Database의 기본 권한은 Authentication 인증 받았을 때 읽기와 쓰기 허용입니다.
database.rules.json 파일에 Realtime Database 권한이 입력되어 있습니다. 해당 파일을 배포함으로써 권한 정보를 업데이트할 수 있습니다.

Firebase console 창을 통해서도 권한 룰을 변경할 수 있습니다. Firebase console 화면에서 Database항목 에서 규칙 탭으로 들어가면  권한을 변경할 수 있고, 시뮬레이터로 테스트도 가능합니다.




프로젝트 생성하고 나서 기본 룰은 Authentication 인증 받아야만 읽기와 쓰기가 가능한 룰입니다.




기본적인 rule 유형입니다. 

규칙 유형
.read
사용자가 데이터를 읽을 수 있는 조건을 기술합니다.
.write
사용자가 데이터를 쓸 수 있는 조건을 기술합니다.
.validate
값의 올바른 형식, 하위 속성을 갖는지 여부 및 데이터 유형을 정의합니다.
.indexOn
정렬 및 쿼리를 위해 색인화할 하위 항목을 지정합니다.

룰과 함께 정의할 때 사용되는 사전 정의된 변수 입니다.

사전 정의된 변수
Linux 기점을 기준으로 하는 현재 시간(밀리초)입니다. SDK의 firebase.database.ServerValue.TIMESTAMP로 생성한 타임스탬프를 검증하는 데 특히 유용합니다.
작업 시도 전에 Firebase 데이터베이스에 존재한 루트 경로를 나타내는 RuleDataSnapshot입니다.
작업 시도 후에 존재할 데이터를 나타내는 RuleDataSnapshot입니다. 새로 기록되는 데이터와 기존 데이터를 포함합니다.
작업 시도 전에 존재한 데이터를 나타내는 RuleDataSnapshot입니다.
ID 및 동적 하위 키를 나타내는 데 사용되는 와일드카드 경로입니다.
인증된 사용자의 토큰 페이로드를 나타냅니다.

제가 적용한 룰입니다. 




저도 더 연구해서 더욱 세세하게 권한을 줘야하겠지만, 일단 채팅앱에서 가장 핵심이되는 Messages 부분은 
RoomUsers아래 채팅방에 인원으로 등록되어 있지 않으면 읽기와 쓰기가 금지되어 있습니다.
".read": "root.child('RoomUsers').child($roomId).child(auth.uid).exists()",
 ".write": "root.child('RoomUsers').child($roomId).child(auth.uid).exists()",


채팅방 목록에 해당하는 UserRooms는 그 아래 키인 uid는 본인것만 읽을 수 있게 허용되어 있습니다.
".read": "$uid === auth.uid",

권한 부분은 조금 더 고민이 필요한 부분이 있는 듯 합니다. 

부족하지만 Firebase 채팅앱 예제가 마무리되었습니다. 부족한점도 많이 있을 듯 합니다. 부족한 점이 보이면 피드백 부탁드립니다~

완성된 소스는 아래의 링크에서 확인 가능합니다.  






  1. 예제 소개
  2. Firebase 설정하기
  3. Hosting을 활용한 프로젝트 준비 작업
  4. Authentication을 이용한 유저 가입 및 로그인 구현하기
  5. Realtime Database를 이용한 채팅기능 구현 - Reatime Database 특징 및 데이터 구조
  6. Realtime Database를 이용한 채팅기능 구현 - 유저데이터 저장하기
  7. Realtime Database를 이용한 채팅기능 구현 - 유저리스팅 화면
  8. Realtime Database를 이용한 채팅기능 구현 - 채팅화면 및 채팅메세지 리스팅
  9. Realtime Database를 이용한 채팅기능 구현 - 채팅메세지 전송기능
  10. Realtime Database를 이용한 채팅기능 구현 - 채팅방 리스팅화면
  11. Realtime Database를 이용한 채팅기능 구현 - 채팅방 초대 기능
  12. Realtime Database를 이용한 채팅기능 구현 - 접속 중인 유저 표시하기
  13. Storage를 이용한 파일 전송기능
  14. Cloud Messaging과 Functions을 이용한 푸시메세지 기능 - FCM Token 정보 저장
  15. Cloud Messaging과 Functions을 이용한 푸시메세지 기능 - Functions를 통한 FCM 발송
  16. Cloud Messaging과 Functions을 이용한 푸시메세지 기능 - Service worker를 이용한 FCM수신
  17. Realtime Database 권한 설정

 


728x90