Works/Web
[Web] Cloud FireStore 관리자 생성 및 관리자 접근 권한 부여
Vader87
2020. 12. 31. 17:08
반응형
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 사용을 하면 위 규칙의 영향은 받지 않습니다.
반응형