본문 바로가기
Works/Web

[Web] Cloud FireStore 관리자 생성 및 관리자 접근 권한 부여

by Vader87 2020. 12. 31.
반응형

Firebase 기능을 사용하면서 Firestore 의 일부 기능은 관리자만 접근 가능하게 하고 싶어 찾아보고 테스트한 내용입니다.

firebase.google.com/docs/rules/rules-language?authuser=0

 

보안 규칙 언어  |  Firebase

Firebase 보안 규칙은 다양한 복잡성과 세분화 범위를 지원하는 유연하고 강력한 커스텀 언어를 활용합니다. 앱에 적합하도록 구체적이거나 일반적인 규칙을 만들 수 있습니다. 실시간 데이터베

firebase.google.com

규칙 정의를 통해 특정 기능을 특정 조건에 맞는 경우에만 사용하게 할 수 있습니다.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
  	function isAdmin(userId) {
  		return exists(/databases/$(database)/documents/admins/$(userId));
  	}
    match /{document=**} {
      allow read, write: if isAdmin(request.auth.uid);
    }
  }
}

위에서 isAdmin 함수는 관리자 인지 확인하는 함수로, collection 의 admins 안에 userId 값이 있는지를 검사합니다.

이제 Firestore 에 데이터를 등록하는 간단한 테스트 코드를 작성해 줍니다.

function writeTestData() {
    console.log('write test data');
    firebase.firestore().collection('test').doc('test_0').set({
        value: 'test_value'
    }).then(function(result) {
        console.log('write test data sucess: ', result);
    }).catch(function(error) {
        console.log(error.message);
        alert('write test data error', error.message);
    });
}

우선은 관리자 등록을 하지않고 쓰기에 실패하는지 확인합니다. 로그를 보면 PERMISSION_DENIED 가 뜨는 것을 알 수 있습니다.

이제 관리자 등록을 하고 데이터 쓰기에 성공하는지 확인을 해 봅니다. 아래와 같이 테스트 유저의 uid 값 필드를 생성해 주고 테스트 하면 정상적으로 test 값이 등록 되는 것을 볼 수 있습니다.

참고로 Cloud Function 을 사용해 Firestore 사용을 하면 위 규칙의 영향은 받지 않습니다.

반응형

댓글