Docs Menu
Docs Home
/ /
Atlas App Services
/

규칙 표현식

규칙 표현식권한 을 사용하여 데이터 액세스를 제어하기 위해 작성하는 JSON 객체입니다. 각 표현식은 사용자가 조치를 취할 수 있는 조건을 정의합니다. 예를 들어, 사용자가 MongoDB 문서 또는 동기화된 영역에서 데이터를 읽거나 쓸 수 있는지 여부를 제어하는 표현식을 작성할 수 있습니다.

App Services는 일반적으로 문서를 입력으로 사용하여 규칙 표현식을 평가하여 참 또는 거짓 결과를 얻습니다.

하드코딩된 값을 사용하는 간단한 정적 표현식을 정의할 수 있습니다.

입력 문서의 "id" 필드가 지정된 하드코딩된 ID "aaaabbbcccdddeeeffff"와 일치하는 경우에만 참으로 평가되는 "정적" 표현식입니다.
{ "id": "aaaabbbbccccddddeeeeffff" }

동적 요구 사항과 복잡하거나 사용자 지정 워크플로를 표현하기 위해 임의의 로직을 지원 하는 표현식을 쓰기 (write) 수도 있습니다. 동적 표현식 에는 현재 컨텍스트를 반영하는 확장 이라는 변수가 포함될 수 있으며 내장 연산자를 사용하여 데이터를 변환할 수 있습니다. 다음 예시 입력 문서의 owner 필드 사용자의 와 id 같고 요청 의 원격 IP 주소 값으로 저장된 허용된 IP 주소 배열 에서 찾을 수 있는 경우 참으로 평가됩니다.

요청하는 사용자와 해당 IP 위치에 따라 달라지는 "동적" 표현식
{
"owner": "%%user.id",
"%%request.remoteIPAddress": {
"$in": "%%values.allowedClientIPAddresses"
}
}

Realm Mobile Sync를 사용할 때는 표현식에 특별한 제한이 있습니다. 동기화와 호환되는 표현식을 참조하세요.

표현식은 부울 값(예: true 또는 false) 또는 JSON 객체입니다.

표현식 객체 필드 이름은 값, 확장 또는 연산자 일 수 있습니다. 각 필드 에는 값, 확장 또는 중첩된 표현식 중 하나가 포함되어야 합니다.

표현식 객체의 형식은 다음과 같습니다.

{
<Value | Expansion | Operator>: <Value | Expression>,
...
}

다른 표현식 문서의 필드에 여러 표현식 문서를 포함하여 복잡한 평가 로직을 처리할 수 있습니다. App Services는 후순으로 표현식을 깊이 우선적 으로 평가합니다.

예시

이 표현식은 someNumber 인수로 제공된 숫자가 특정 범위에 속하는 경우에만 true 로 평가됩니다.

{
"%%args.someNumber": {
"%and": [
{ "$gt": 0 },
{ "$lte": 42 }
]
}
}

표현식에 둘 이상의 필드가 있는 경우 표현식의 모든 필드가 true로 평가되는 경우에만 해당 표현식은 true 로 평가됩니다. 즉, App Services는 단일 표현식의 여러 필드를 "AND" 연산으로 취급합니다.

예시

이 타사 서비스 규칙 표현식은 url 인수가 제공 되었고 body.userId 인수가 모두 조치를 호출한 사용자의 ID와 일치하는 경우에만 true 로 평가됩니다.

{
"%%args.url": { "$exists": true },
"%%args.body.userId": "%%user.id"
}

App Services는 먼저 확장을 런타임 값으로 바꾼 다음 확장된 표현식 문서의 각 필드를 부울 표현식으로 평가하여 표현식을 평가합니다. 표현식의 모든 필드가 true 으로 평가되면 표현식도 true 로 평가됩니다. 빈 표현식({})은 true 로 평가됩니다.

표현식 필드는 다음 규칙에 따라 평가됩니다.

  • 확장된 필드 이름이 해당 값과 일치하면 true 로 평가됩니다.

  • 필드 값이 내장된 표현식 인 경우 포함된 내장된 표현식 과 동일한 값으로 평가됩니다. 포함된 표현식을 참조하세요.

참고

규칙에서 %%args 또는 %%root 확장 을 명시적으로 사용하지 않는 경우 표현식 필드 이름은 기본값 으로 동일한 이름의 인수 또는 문서 필드를 확인합니다. 예를 예시 { "url": "https://www.example.com" } 표현식 은 기본적으로 서비스 규칙에서는 %%args.url , MongoDB 규칙에서는 %%root.url 에 대해 값을 평가합니다.

확장은 표현식에서 동적 값을 나타내는 변수입니다. 확장은 2개의 퍼센트 기호와 확장 이름으로 표시됩니다. 그것들은 다음과 같습니다:

  • %%rootMongoDB 문서의 데이터를 나타냅니다.

  • %%user은(는) 앱과 상호 작용하는 사용자를 나타냅니다.

  • %%request은(는) 수신 요청을 나타냅니다.

  • %%values, 정적 값을 나타냅니다.

  • %%environment은(는) 앱의 환경을 나타냅니다.

  • %%args서비스 조치에 전달된 인수를 나타냅니다.

앱이 표현식을 평가할 때 표현식의 각 확장을 평가 시점의 컨텍스트 및 앱의 구성에 따라 결정된 특정 값으로 바꿉니다.

예시

다음 예제에서는 'apply when' 표현식에서 %%user%%root 확장을 사용합니다.

"applyWhen": {
"%%user.custom_data.status": "ACTIVE",
"%%root.owners": "%%user.id"
}

참고

%%user 과 같은 일부 확장은 모든 표현식에서 사용할 수 있습니다. 동기화와 호환되지 않고 문서 에서 작동하는 표현식에서만 사용할 수 있는 %%root 와 같이 특정 컨텍스트로 제한되는 경우도 있습니다.

Realm Mobile Sync 사용 시 확장팩에는 특별한 제한 사항이 있습니다. 동기화와 호환되는 확장을 참조하세요.

%%true
Type: boolean
Usable In: Any Expression

true 으로 평가합니다. 중첩된 표현식이 true 로 평가되어야 한다고 어설션하려면 이를 사용합니다.

%%false
Type: boolean
Usable In: Any Expression

false 으로 평가합니다. 중첩된 표현식이 false 로 평가되어야 한다고 어설션하려면 이를 사용합니다.

%%values
Type: object
Usable In: Any Expression

애플리케이션의 을 나타냅니다. 객체의 각 필드는 값 이름을 해당 JSON 값 또는 시크릿에 매핑합니다.

예시

admin_ids 값이 사용자의 계정 ID를 포함하는 목록인 경우 다음 표현식은 true 으)로 평가됩니다.

{
"%%user.id": { "$in": "%%values.admin_ids" }
}
%%environment
Type: object
Usable In: Any Expression

현재 앱 환경 을 나타냅니다. 환경 이름(tag)을 읽고 환경 값에 액세스할 수 있습니다.

객체의 각 속성은 환경 값의 이름을 현재 환경의 값에 매핑합니다.

{
"tag": "<Environment Name>"
"values": {
"<ValueName>": <Value>
}
}

예시

다음은 현재 환경이 "production" 이고 "baseUrl" 환경 값이 정의된 경우 true 로 평가되는 규칙 표현식입니다.

{
"%%environment.tag": "production",
"%%environment.values.baseUrl": { "%exists": true }
}
%%request
Type: object
Usable In: Any Expression

들어오는 요청을 나타냅니다.

{
"httpMethod": "<HTTP Method>",
"httpReferrer": "<HTTP Referer Header>",
"httpUserAgent": "<HTTP User Agent>",
"rawQueryString": "<URL Query String>",
"remoteIPAddress": "<IP Address>",
"requestHeaders": {
"<Header Name>": ["<Header Value>", ...]
},
"service": "<Service Name>",
"action": "<Endpoint Function or Service Action Name>",
"webhookUrl": "<HTTPS Endpoint Route>"
}
%%user
Type: object
Usable In: Any Expression

요청을 시작한 사용자를 나타냅니다. 사용자 객체 에는 계정 정보, 인증 제공자의 메타데이터, 앱의 사용자 지정 데이터가 포함되어 있습니다.

{
"id": "<User Account ID>",
"type": "<normal | server>",
"data": {
"<Field Name>": <Value>,
...
}
"custom_data": {
"<Field Name>": <Value>,
...
}
"identities": [
{
"providerType": "<Auth Provider Name>",
"id": "<Provider User ID"
}
...
]
}
%%user.id
Type: string
Usable In: Any Expression

인증된 사용자의 ID입니다.

%%user.type
Type: "normal" | "server"
Usable In: Any Expression

요청을 시작한 사용자 유형입니다. API 키 사용자는 "server" (으)로, 다른 모든 사용자는 "normal" 으)로 평가합니다.

%%user.custom_data
Type: object
Usable In: Any Expression

사용자의 사용자 지정 데이터입니다. 정확한 내용은 사용자 지정 사용자 데이터 구성에 따라 달라집니다.

예시

"custom_data": {
"primaryLanguage": "English",
}
%%user.data
Type: object
Usable In: Any Expression

사용자의 메타데이터입니다. 정확한 내용은 사용자와 연결된 인증 제공자 ID에 따라 달라집니다.

예시

"data": {
"name": "Joe Mango",
"email": "joe.mango@example.com"
}
%%user.identities
Type: object[]
Usable In: Any Expression

사용자와 연결된 모든 인증 제공자 ID 목록입니다. ID는 권한 부여 제공자가 사용자에게 부여한 고유 식별자와 제공자의 유형으로 구성됩니다.

예시

"identities": [
{
"id": "5bce299457c70db9bd73b8-aajddbkuvomsvcrjjfoxs",
"providerType": "local-userpass"
}
]
%%this
Type: any

데이터베이스 작업이 끝날 때 존재하는 특정 필드의 값입니다.

%%prev
Type: any

쓰기 작업에 의해 변경되기 전의 특정 필드 값입니다.

%%root
Type: object

데이터베이스 작업이 끝날 때 존재하는 전체 문서입니다.

%%prevRoot
Type: object

쓰기 작업에 의해 변경되기 전의 전체 문서입니다.

예시

다음은 문서가 이전에 존재했거나(즉, 조치가 삽입이 아닌 경우) 문서의 status 필드 값이 "new" 인 경우 true 으)로 평가하는 MongoDB 스키마 유효성 검사 표현식입니다.

{
"%or": [
{ "%%prevRoot": { "%exists": %%true } },
{ "%%root.status": "new" }
]
}
%%args
Type: object

서비스 조치 에 인수로 전달된 값이 포함된 문서입니다. 매개 변수 이름으로 각 인수에 액세스할 수 있습니다.

예시

다음은 발신자의 전화번호( from 인수)가 특정 값과 일치하는 경우 true (으)로 평가하는 Twilio 서비스 규칙입니다.

{
"%%args.from": "+15558675309"
}
%%partition
Type: string | number | BSON.ObjectId

(파티션 기반 동기화 만 해당) 평가 중인 현재 파티션의 파티션 키 값입니다.

표현식 연산자는 표현식 내의 조치를 나타냅니다. 연산자는 하나 이상의 인수를 받아 결과 값으로 평가합니다. 결과의 유형과 값은 사용하는 연산자와 해당 연산자에 전달하는 인수에 따라 달라집니다.

표현식 연산자는 단일 퍼센트 기호(%) 또는 달러 기호($)로 시작하는 문자열로 표시됩니다. 모든 표현식에 사용할 수 있습니다.

다음 연산자를 사용하면 EJSON과 JSON 표현 간에 값을 변환할 수 있습니다.

%stringToOid

12바이트 또는 24바이트 문자열을 EJSON objectId 객체로 변환합니다.

예시

{
"_id": {
"%stringToOid": "%%user.id"
}
}
%oidToString

EJSON objectId 객체를 문자열로 변환합니다.

예시

{
"string_id": {
"%oidToString": "%%root._id"
}
}
%stringToUuid

36바이트 문자열을 EJSON UUID 객체로 변환합니다.

예시

{
"_id": {
"%stringToUuid": "%%user.id"
}
}
%uuidToString

EJSON UUID 객체를 문자열로 변환합니다.

예시

{
"string_id": {
"%uuidToString": "%%root._id"
}
}

중요

내부 작업 없음

%stringToUuid, %uuidToString, %stringToOid%oidToString 는 JSON 연산자를 평가하지 않습니다. 리터럴 string/EJSON 객체 또는 하나로 평가되는 확장 을 제공해야 합니다.

다음 연산자를 사용하면 App Services 애플리케이션에서 함수를 호출할 수 있습니다.

%function

지정된 이름과 인수를 사용하여 함수 를 호출합니다. 함수가 반환하는 값으로 평가합니다.

예시

{
"%%true": {
"%function": {
"name": "isEven",
"arguments": [42]
}
}
}

다음 연산자를 사용하면 값이 객체에 있는지 배열에 있는지 확인할 수 있습니다.

$exists

할당된 필드에 값이 있는지 확인합니다. 결과를 나타내는 부울로 평가합니다.

예시

{
"url": { "$exists": true }
}
$in

지정된 값 배열을 확인하여 배열에 이 연산자가 할당된 필드의 값이 포함되어 있는지 확인합니다. 결과를 나타내는 부울로 평가합니다.

예시

{
"url": {
"$in": [
"https://www.example.com",
"https://www.mongodb.com"
]
}
}
$nin

지정된 값 배열을 확인하여 배열에 이 연산자가 할당된 필드의 값이 포함되어 있지 않은지 확인합니다. 결과를 나타내는 부울로 평가합니다.

예시

{
"url": {
"$nin": [
"https://www.example.com",
"https://www.mongodb.com"
]
}
}

다음 연산자를 사용하면 확장된 값을 포함한 값을 비교할 수 있습니다.

$eq

할당된 필드가 지정된 값과 같은지 확인합니다. 결과를 나타내는 부울로 평가합니다.

예시

{ "score": { "$eq": 42 } }
$ne

할당된 필드가 지정된 값과 같지 않은지 확인합니다. 결과를 나타내는 부울로 평가합니다.

예시

{ "numPosts": { "$ne": 0 } }
$gt

할당된 필드가 지정된 값보다 엄밀히 큰지 확인합니다. 결과를 나타내는 부울로 평가합니다.

예시

{ "score": { "$gt": 0 } }
$gte

할당된 필드가 지정된 값보다 크거나 같은지 확인합니다. 결과를 나타내는 부울로 평가합니다.

예시

{ "score": { "$gte": 0 } }
$lt

할당된 필드가 지정된 값보다 작은지 확인합니다. 결과를 나타내는 부울로 평가합니다.

예시

{ "score": { "$lt": 0 } }
$lte

할당된 필드가 지정된 값보다 작거나 같은지 확인합니다. 결과를 나타내는 부울로 평가합니다.

예시

{ "score": { "$lte": 0 } }

돌아가기

역할 기반 권한

이 페이지의 내용