Cloud Firestore에서 문서를 부분적으로 업데이트하는 방법

타협하지 않고 Cloud Firestore에서 문서를 부분적으로 업데이트하려는 시나리오가 있습니다security rules.

주문 컬렉션이 있고 아래 스크린샷과 같이 해당 컬렉션에서 새 주문 문서를 만들 수 있는 사용자 역할이 있는 로그인한 사용자가 있다고 가정해 보겠습니다.



Recommended
Firebase Cloud Firestore — Add, Update, Get, Delete, OrderBy, Limit



사용자 역할



사용자의 주문 컬렉션에 액세스하기 위한 READ 및 WRITE 보안 규칙은 다음과 같습니다.

쓰기 규칙

match /orders/{ordersId} {
      allow write: if
           request.auth.uid != null && request.auth.token.isUser == true
}


위의 보안 규칙은 사용자가 로그인하고 사용자 역할이 사용자일 때 새 문서를 만들 수 있도록 허용합니다.

이 단계에서 isUser 역할이 어디에서 오는지 궁금할 수 있습니다.

Firebase에서 사용자 역할을 만드는 방법에는 두 가지가 있습니다. Auth Claims를 사용하여 Cloud Functions를 통해 역할을 생성합니다.

이 항목에 대한 자세한 내용은 인증 클레임을 사용하여 사용자 역할을 만드는 방법에 대해 자세히 다루는 다른 문서를 참조하세요.

Recommended
Firebase + Vue.js ← Role Based Authentication & Authorization



사용자가 다른 사용자가 아닌 자신의 주문에 액세스할 수 있도록 READ RULE.

match /orders/{ordersId} {
      allow write: if
           request.auth.uid == resource.data.user.uid && request.auth.token.isUser == true
}


위의 보안 규칙은 로그인한 사용자의 uid가 아래 스크린샷과 같이 주문 문서의 사용자 필드 안에 있는 uid와 일치할 때 사용자가 주문을 받을 수 있도록 합니다.



보안 규칙은 로그인한 사용자에게 isUser 역할이 있는지도 확인합니다.

꽤 간단합니다.

드라이버 역할



아래 주문 이미지에서 볼 수 있듯이 주문이 생성되자마자 드라이버를 주문에 할당했습니다. 시연용으로 이렇게 했습니다.



실제로는 관리자 패널을 통해 주문한 후 또는 주문하기 전에 주문을 수락할 수 있도록 사용 가능한 운전자에게 주문 알림을 전송하여 운전자를 할당한 다음 주문 문서에 추가해야 합니다.



운전자가 주문에 할당되면 매장 이름, 매장 주소, 사용자 주소 등과 같은 주문의 특정 정보에 액세스해야 합니다.

따라서 드라이버가 할당된 순서에 대한 읽기 액세스 권한을 부여해 보겠습니다.

match /orders/{ordersId} {
      allow read: if
           request.auth.uid == resource.data.driver.uid && request.auth.token.isDriver == true
}


좋아요.

이제 사용자는 자신의 주문을 읽고 쓸 수 있으며 운전자는 주문 문서를 읽을 수만 있습니다.

멋진.

Recommended
Firebase + Vue.js ← Role Based Authentication & Authorization



주문 상태



이제 드라이버가 음식 선택, 배달 등과 같은 주문을 진행함에 따라 사용자에게 주문 상태를 제공하고 싶습니다.

Continue Reading...

좋은 웹페이지 즐겨찾기