반응형
Firestore 데이터 입출력시 규칙 정하는 법
- 데이터 추가 시 의도한 형식에 맞게 추가하고자 할 경우
- if 조건문을 통해 제어하는 방법 ( 위변조가 가능하기에 근본적인 해결책이 아님)
- Firestore Console → Firestore Database → 규칙
- 우선 형식은 아래와 같다
- 경로: 어떤 게시물(Collection or Document)에 규칙을 정할 것인지
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match 경로 { 조건 } } }
- ex) product 컬렉션에 조건을 주겠다고 하면
- {docid} ⇒ product에 있는 모든 문서에 대한 조건을 주겠다는 의미
- 규칙
- allow read ⇒ 읽기 규칙 설정 ⇒ 어떤 사람이 읽을 수 있는지에 대한 규칙
- allow create ⇒ 생성 규칙 설정 ⇒ 어떤 사람이 생성할 수 있는지에 대한 규칙
- allow update ⇒ 수정 규칙 설정 ⇒ 어떤 사람이 수정할 수 있는지에 대한 규칙
- allow delete ⇒ 삭제 규칙 설정 ⇒ 어떤 사람이 삭제할 수 있는지에 대한 규칙
- 아래는 로그인 한 사람만 /product의 모든 문서를 읽을 수 있도록 하기 위한 코드
- request ⇒ 요청한 사람의 정보
- request.auth ⇒ 요청한 사람의 로그인 정보
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /product/{docid} { allow read : if request.auth != null; } } }
- 위와 같이 작성했는데 계속 데이터가 조회가 되고
- permission Error가 발생하지 않는다면 로그아웃 함수를 한번 처리하고 다시 시도해보면 잘 작동하는 것을 확인할 수 있다.
- 본인도 안되서 계속 코드 확인했었음;; 핳
- 이제 내가 발행한 문서만 update 가능하도록 하는 규칙을 작성한다면
- 우선 게시글을 작성시 작성자의 uid도 함께 기입해주고
- 게시글 작성자의 uid와 현재 로그인 되어 있는 유저의 uid가 같은 경우에 대한 조건 추가를 위해 아래와 같이 코드 작성
- response.data ⇒ 현재 수정하려는 게시물의 정보가 담겨 있음
- .who는 따로 해당 key값으로 넣은 게시글 작성자의 uid를 의미
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /product/{docid} { allow read : if request.auth != null; allow update : if request.auth.uid == response.data.who } } }
- 이러한 규칙은 아래의 경로에서 확인할 수 있다.
- 그리고 많이 사용하는 코드로
- 생성시 의도한 데이터 타입에 맞는 데이터, 값 입력 검사 등 다양하게 조건을 걸어 조사할 수 있다.
- 만약 현재 name에 대한 값이 1글자 이상 들어가야 한다면
- request.resource.data ⇒ 현재 생성할 데이터의 상태
allow create : if request.resource.data.name.size() > 0;
- 정규식을 사용해 조사하고 싶다면
- matches() 로 조사할 수 있다.
allow create : if request.resource.data.name.matches()
- 우선 형식은 아래와 같다
- 그리고 모든 컬렉션과 문서를 찾고자 한다면
- /{docid=**} 로 하위 컬렉션 까지 적용한다고 작성할 수 있다.
- 보통은 컬렉션 마다 적용하는 것이 좋다.
- 또한 코드가 너무 길어진다면 하위에서 함수로 작성 후 적용할 수도 있다.
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{docid=**} { } } }
'Flutter' 카테고리의 다른 글
[Flutter, 토이 프로젝트] BottomNavigationBar (0) | 2023.08.18 |
---|---|
[Flutter] 반응형으로 스크린 사이즈 대응하기 & 유용한 패키지 (0) | 2023.08.17 |
[Flutter] Firebase 회원 인증기능 (0) | 2023.08.16 |
[Flutter] Firebase에 데이터 저장 & 조회 & 삭제 & 수정 (0) | 2023.08.15 |
[Flutter] Firebase 셋팅 (다수 에러 해결 과정) (0) | 2023.08.15 |