반응형
Firebase 기능을 사용하면서 Firestore 의 일부 기능은 관리자만 접근 가능하게 하고 싶어 찾아보고 테스트한 내용입니다.
firebase.google.com/docs/rules/rules-language?authuser=0
규칙 정의를 통해 특정 기능을 특정 조건에 맞는 경우에만 사용하게 할 수 있습니다.
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 사용을 하면 위 규칙의 영향은 받지 않습니다.
반응형
'Works > Web' 카테고리의 다른 글
[Web] Mac OS 에서 SSL 인증 받기 (1) | 2021.01.02 |
---|---|
[Web] 공통 HTML 코드 별도로 관리하기 (0) | 2021.01.02 |
[Web] Firebase Cloude Function 사용기 (4) | 2020.12.30 |
[Web] Chrome 에서 변경한 코드가 반영되지 않을 때 (1) | 2020.12.29 |
[Web] Firebase emulator 개발 환경 설정 (0) | 2020.12.20 |
댓글