본문 바로가기

프로그래밍/firebase

[firebase] firestore DB 데이터 수정, 삭제

728x90
반응형

이전 글에서 데이터 읽고 쓰기를 해보았고 이번에는 수정과 삭제를 할 건데 매우 간단하게 할 수 있다.

 

우선 수정부터 알아 보자.

 

 

id가 send라는 버튼을 누르면 수정이 동작하게 만들어 놨다.

 

삭제하려는 문서의 ID를 URL에 포함하여 보냈는데 대략 localhost/edit? id=문서 ID 이런 식으로 URL을 보냈다.

뒤에 id로 보낸 값을 가져오기 위해 맨 위에 new URLSearchParams를 이용해 값을 가져와 처리해 주면 된다.

 

전에 알아봤던 문서 쓰기 방법과 비슷한데 update로 바꿀 필드만 값을 변경해 주면 된다.

 

아 그리고 전에 규칙 설명할 때 create, update, delete로 각 권한을 나눠서 부여할 수 있다고 말했었는데 아래와 같이 각각 권한을 부여해 줄 수 있다.

 

 

그림이 잘 안 보여서 글로 쓰자면

 

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // match /{document=**} {
    // 	allow read : if true;
    //   allow write: if request.auth != null;
    // }
    match /product/{docId} {
    	allow read : if true;
        allow update : if request.auth.uid == resource.data.uid;
        allow delete : if request.auth.uid == resource.data.uid;
        allow create : if request.auth != null;
    }
    match /user/{docId} {
    	allow read, write : if true;
    }
  }
}

 

이런 식으로 권한 부여를 해준다.

수정과 삭제는 본인 글에만 권한이 있어야 하기 때문에 request.auth.uid와 resource.data.uid 가 같은 사용자만 권한을 부여했고 글 쓰기는 로그인된 사용자만 쓸 수 있도록 허용해 놓았다.

 

물론 front 쪽에서도 처리를 할 수 있지만 front는 마음만 먹으면 언제든 조작이 가능하기 때문에 backend 쪽에서 확실하게 처리하는 게 보안에도 훨씬 좋다.

 

request.auth.uid 는 현재 로그인한 사용자의 고유 식별번호를 가져오는 것인데 이건 firebase 인증을 이용해 로그인을 하면 가져올 수 있다. 인증 기능을 설명할 때 다시 한번 설명을 할 것이다.

 

그리고 resource.data.uid 는 product 컬렉션에 해당하는 문서 ID가 갖고 있는 uid 값을 가져오는 것이다. 나는 글을 등록할 때 현재 로그인된 사용자의 uid로 필드에 추가해서 넣어줬기 때문에 저런 식으로 가져올 수 있다.

 

로그인 여부와 상관없이 단순하게 데이터 값이 변하는 걸 확인하고 싶으면 규칙을 모두 true로 주면 된다.

 

삭제 처리도 매우 간단하다.

 

 

코드 단 1줄로 삭제 처리를 할 수 있는데 doc() 안에 삭제할 문서의 ID를 넣어주고 delete()를 호출해 주면 삭제가 처리된다.

 

이로써 firestore database의 기본적인 읽기, 쓰기, 수정, 삭제 방법을 알아보았다.

 

추가로 특정 데이터만 가져오기, 정렬 등은 기본 문서만 봐도 잘 나와 있으니 한번 응용해서 해보면 좋을 것 같다.

단, firestore는 페이징 처리가 상당히 어렵다는데 추후에 페이징 처리에 대한 포스팅을 진행해 보겠다.

728x90
반응형