파이어베이스 측에서 보안 규칙에서 안전하지 않은 규칙 오류가 떴다.
테스트를 위해서 임시적으로 모든 사용자의 접근을 풀어두었는데,
아무래도 해킹 위험성 등이 높으니 보안 규칙을 더 세세하게 설정해
DB 접근 권한을 제한라는 말이었다.
(파이어베이스 보안규칙은 파이어베이스 데이터베이스의 규칙 탭에서 설정할 수 있다.)
Be my desk 는 비로그인 사용자도 피드의 내용을 확인할 수 있도록 해야 했고,
따로 보안상 민감한 공개 비공개 페이지 등은 존재하지 않았기 때문에
아래와 같이 모든 문서에서 읽기는 가능하되, 쓰기/수정/삭제 는 로그인 한 유저만 사용하도록 했다.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if true
allow write, update, delete: if request.auth != null
}
}
}
다양한 커스터 마이징이 가능하기 때문에 아래를 참고해서 각 프로젝트에 맞게 설정해보자.
잠금모드 - 모든 읽기 쓰기를 허용하지 않음
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
허용모드
- 모두에게 읽기 쓰기를 허용함
- 강력한 보안규칙이 아니고, 해킹의 가능성이 있기 때문에
새로운 프로젝트 생성 및 테스트 단계에서만 사용하는 것을 권장!
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
인증된 사용자에게만 허용모드
- 인증된 사용자에게만 읽기 쓰기를 허용함
- 인증된 유저인지를 확인 후 데이터 수정을 허용한다.
(로그인 사용자를 판별하기 위해 authentification 기능을 사용해야 한다.)
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
컨텐츠 소유자에게만 허용모드
- 컨텐츠 소유자에게만 읽기 쓰기를 허용함
- 해당 컨텐츠의 소유자인지를 확인하고, 소유자에게만 수정 권한을 줌.
글을 쓴 사람만 그 글을 수정하게 하려면!
service cloud.firestore {
match /databases/{database}/documents {
match /"여기에 collection 이름을 넣기"/{userId}/{documents=**} {
allow read, write: if request.auth != null && request.auth.uid == userId
}
}
}
공개 비공개 모드
- 모든 사용자가 읽을 수 있지만, 쓰고 수정하고 삭제하는 것은 컨텐츠 소유자만 허용!
service cloud.firestore {
match /databases/{database}/documents {
match /"여기에 collection 이름을 넣기"/{document} {
allow read: if true
allow create: if request.auth.uid == request.resource.data.author_uid;
allow update, delete: if request.auth.uid == resource.data.author_uid;
}
}
}
역할 지정모드
- 컨텐츠 공동 소유자가 있을 경우 여러명에게 관리 권한 허용!
service cloud.firestore {
match /databases/{database}/documents {
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
allow read: true;
match /"여기에 collection 이름을 넣기"/{document} {
allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"
}
}
}
firebase 공식 페이지 - 보안 규칙 및 Firebase 인증
[Firebase] 보안 규칙에 대해 간단히 알아보기 - 1