파이프라인 작업의 보안 규칙

파이프라인 쿼리 규칙 지원의 기본 목표는 기존 규칙 엔진의 필터링 기능과 일치하는 것입니다. 파이프라인 쿼리는 다양한 기능을 제공하지만 규칙 엔진은 쿼리 만족도와 보안을 보장하기 위해 간단한 필드만 인식하도록 제한됩니다.

지원되는 필터 표현식

쿼리가 규칙에 의해 제한되려면 상수에 대해 표준 비교 연산자를 사용해야 합니다. 규칙 엔진에서 인식하는 필터 유형은 다음과 같습니다.

  • 등호 및 부등: eq, neq.
  • 비교: gt, gte, lt, lte.
  • 멤버십: in, arrayContains.

예를 들면 다음과 같습니다.

  • where(eq("foo", 2))
  • where(lt("foo", 2))
  • documents("/user/1", "/user/2").where(...)

요청 속성

표준 쿼리에서 사용할 수 있는 일부 속성은 파이프라인에서 지원되지 않지만 request 객체를 사용하여 인증을 확인하고 컨텍스트를 쿼리할 수 있습니다.

지원되는 속성

새 엔진은 다음 속성을 계속 지원합니다.

  • request.auth: 사용자 UID 및 토큰 데이터에 액세스합니다.
  • request.method: 작업을 식별합니다(예: get, list).
  • request.path: 액세스되는 리소스의 경로입니다.
  • request.time: 요청의 서버 측 타임스탬프입니다.

지원되지 않는 속성

limit, offset, orderBy와 같은 request.query 속성은 다단계 쿼리에서 이러한 값을 결정하는 복잡성으로 인해 파이프라인 규칙 검사에서 지원되지 않습니다.

파이프라인 단계 처리 및 권한

보안 규칙의 세부 작업에 매핑되는 다양한 파이프라인 단계가 있습니다.

  • allow list 권한: collection(), collectionGroup(), database() 단계에서 트리거됩니다.
  • allow get 권한: 일괄 get 작업과 유사하게 처리되는 documents() 단계에 의해 트리거됩니다.
  • 필드 수정 단계: 규칙은 파생 값이 아닌 저장된 데이터에만 적용됩니다. 파이프라인에 필드를 수정하는 단계(예: AddFields, ReplaceWith, Select)가 포함된 경우 규칙 엔진은 해당 단계가 발생한 후 필터 제약 조건 적용을 중지합니다.
  • 리터럴 단계: literals() 단계는 데이터베이스에서 읽지 않지만 비용이 발생할 수 있습니다. 악용을 방지하려면 규칙으로 확인할 수 있는 다른 단계(예: collection())와 페어링해야 합니다.