Cloud Firestore 보안 규칙에서 자주 쓰는 방법

11694 단어 FirebaseFirestore
이번에는 Cloud Firestore의 보안 규칙에서 자주 쓰는 기법 등을 정리해 가고 싶습니다. (그 밖에도 나오면 수시로 갱신해 간다)



인증 시스템



인증하는 사용자만 읽을 수 있습니다.
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read: if request.auth != null;
    }
  }
}

액세스하는 문서 ID가 요청의 uid와 일치하면 읽을 수 있습니다. 즉 자신의 데이터였을 경우에 읽기가 가능하게 됩니다.
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read: if request.auth.uid == userId;
    }
  }
}

Cloud Firestore는 문서 데이터를 기반으로 규칙을 동적으로 만들 수 있으므로 다음과 같은 작업을 수행할 수 있습니다. 유용합니다 😄
덧붙여서, 코멘트 아웃 하고 있는 부분과 같이 절대 패스를 지정해, get 함수로 문서를 취득하는 것도 가능합니다.
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{postId} {
      allow update: if resource.data.teacherId == request.auth.uid;
      // allow update: if get(/databases/$(database)/documents/posts/$(postId)).data.teacherId == request.auth.uid;
    }
  }
}

밸리데이션계



요청 데이터에 email가 있으면 문서를 만들 수 있습니다.
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{postId} {
      allow create: if ('email' in request.resource.data);
    }
  }
}

요청 데이터의 email가 String이면 문서를 만들 수 있습니다. 또한 is를 사용하여 확인할 수 있는 데이터 형식은 다음과 같습니다. 자세한 내용은 여기을 참조하십시오.
  • 문자열
  • int
  • float
  • bool
  • null
  • timestamp
  • list
  • map
  • service cloud.firestore {
      match /databases/{database}/documents {
        match /posts/{postId} {
          allow create: if (request.resource.data.email is string);
        }
      }
    }
    

    요청 데이터의 email 크기가 3자 이상 254자 이하인 경우 문서를 만들 수 있습니다.
    service cloud.firestore {
      match /databases/{database}/documents {
        match /posts/{postId} {
          allow create: if (request.resource.data.email.size() >= 3) && (request.resource.data.email.size() <= 254);
        }
      }
    

    기타



    사용자 테이블에 자신의 uid와 일치하는 테이블이 있는 사용자만 읽을 수 있습니다.
    service cloud.firestore {
      match /databases/{database}/documents {
        match /users/{userId} {
          allow read: if exists(/databases/$(database)/documents/users/$(request.auth.uid));
        }
      }
    }
    

    아래는 사용 빈도가 높기 때문에 커스텀 함수로서 잘라 두면 편리합니다.
        function isAuthenticated() {
          return request.auth != null;
        }
        function isUserAuthenticated(userId) {
          return request.auth != null && userId == request.auth.uid;
        }
        function requestData() {
          return request.resource.data;
        }
    

    참고


  • htps : // 푹 빠져라. 오, ぇ. 코 m / 드 cs / 푹신 s 잡아 / 세쿠리 ty / 루 ぇ s - 안녕 치온 s? hl = 그럼
  • htps : // 푹 빠져라. 오, ぇ. 코 m / 드 cs / 푹신 s 취해 / 세쿠리 ty / 세쿠레 였어? hl = 그럼
  • 좋은 웹페이지 즐겨찾기