사용자가 자신의 프로필 데이터를 읽을 때 읽기 작업에 대한 Firebase 보안 규칙을 설정하는 방법

edn

Flutter 앱을 개발하고 Firebase를 백엔드로 사용하고 있습니다. 내 앱에서 각 사용자는 앱을 사용하기 위해 가입해야하며 사용자의 프로필 데이터는 user_profile컬렉션에 저장됩니다 .

각 사용자의 프로필 데이터는 컬렉션의 별도 문서에 저장됩니다. 각 문서의 문서 ID는 사용자가 처음 가입 할 때 Firebase 인증에서 생성 한 사용자 ID와 동일합니다. 또한 해당 사용자를 위해 각 문서의 필드 (uid라는 이름)에 사용자 ID를 저장합니다.

보안 부분에서는 각 사용자가 자신의 프로필 데이터 만 읽을 수 있기를 바랍니다. 다음 규칙을 설정했습니다.

// Rules for User Profile data
match /user_profile/{any} {
  allow read: if (request.auth != null) && 
                 (resource.data.uid == request.auth.uid) && 
                 exists(/databases/$(database)/documents/users/$(request.auth.uid));

위의 예와 같이 규칙을 설정하면 맞습니까? (1) 사용자는 인증을 받아야합니다. (2) uid들어오는 요청의는 사용자가 읽고 자하는 해당 문서의 uid 필드와 동일해야합니다. (3) 요청에서 사용 가능한 uid가있는 문서가 해당 문서에 존재해야합니다.

내가 모든 것을 불필요하게 복잡하게 만든다면 분명하게 말할 수 없습니다. 예를 들어, 규칙 (1)이 규칙 (2)와 같은 일을합니까? 규칙 (1)과 (2)가 있지만 규칙 (3)도 추가합니까?

르노 타르 넥

질문의 다음 요소를 기반으로합니다.

  1. 사용자의 프로필 데이터는 user_profile컬렉션에 저장됩니다.
  2. 각 (사용자 프로필) 문서의 문서 ID는 사용자 ID와 동일합니다.
  3. 각 사용자가 자신의 프로필 데이터 만 읽을 수 있기를 원합니다.

다음 읽기 보안 규칙이 트릭을 수행해야합니다.

service cloud.firestore {
  match /databases/{database}/documents {

    // Match any document in the 'user_profile' collection
    match /user_profile/{userId} {
      allow read: if request.auth != null && request.auth.uid == userId;
      // ...
    }
  }
}

즉, 각 (사용자 프로필) 문서의 문서 ID 가 보안 규칙에 userId포함 된 필드를 사용할 필요가없는 것과 같기 때문에 userId와일드 카드 식을 {userId}사용하면 userId규칙 에서 변수를 사용할 수 있습니다 . doc를 참조하십시오 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사