Docs Menu
Docs Home
/ /
Definir permisos de acceso a datos

Expresiones de reglas

Una expresión de regla es un objeto JSON que se escribe para controlar el acceso a datos con permisos. Cada expresión define las condiciones bajo las cuales un usuario puede realizar una acción. Por ejemplo, se puede escribir una expresión para controlar si un usuario puede leer o escribir datos en un documento de MongoDB o en un dominio sincronizado.

App Services evalúa una expresión de regla, generalmente con un documento como entrada, para obtener un resultado verdadero o falso.

Puede definir expresiones estáticas y simples que utilicen valores codificados:

Una expresión "estática" que solo se evalúa como verdadera si el campo "id" del documento de entrada coincide con el ID codificado dado "aaaabbbbccccddddeeeeffff"
{ "id": "aaaabbbbccccddddeeeeffff" }

También puede escribir expresiones que admitan lógica arbitraria para expresar requisitos dinámicos y flujos de trabajo complejos o personalizados. Una expresión dinámica puede incluir variables que reflejan el contexto actual, denominadas expansiones y pueden usar operadores integrados para transformar datos. El siguiente ejemplo se evalúa como verdadero si el documento de entrada... owner El campo es igual al del usuario id y la dirección IP remota de la solicitud se puede encontrar en una matriz de direcciones IP permitidas que se almacena como un valor:

Una expresión "dinámica" que varía según el usuario solicitante y su ubicación IP
{
"owner": "%%user.id",
"%%request.remoteIPAddress": {
"$in": "%%values.allowedClientIPAddresses"
}
}

Al usar la sincronización de dispositivos, las expresiones tienen restricciones especiales. Consulte Expresiones compatibles con la sincronización.

Una expresión es un valor booleano (es decir, true o false) o un objeto JSON.

Los nombres de campo de un objeto de expresión pueden ser un valor, una expansión o un operador. Cada campo debe contener un valor, una expansión o una expresión anidada.

Los objetos de expresión tienen el siguiente formato:

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

Puede incrustar varios documentos de expresión en los campos de otro documento de expresión para gestionar una lógica de evaluación compleja. App Services evalúa las expresiones en profundidad y en orden posterior: es decir, comienza en la parte inferior del árbol de expresiones y retrocede hasta los campos raíz, evaluando cada expresión después de todas sus expresiones incrustadas.

Ejemplo

Esta expresión se evalúa como true solo si el número proporcionado como argumento someNumber cae dentro de un rango específico.

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

Cuando una expresión tiene más de un campo, esta se evalúa como true solo si todos sus campos se evalúan como verdaderos. En otras palabras, App Services trata varios campos de una misma expresión como una operación "AND".

Ejemplo

Esta expresión de regla de servicio de terceros se evalúa como true solo si url se proporcionó el argumento y el body.userId argumento coincide con el ID del usuario que llamó a la acción.

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

App Services evalúa las expresiones reemplazando primero las expansiones con sus valores de tiempo de ejecución y, a continuación, evaluando cada campo del documento de expresión expandida como una expresión booleana. Si todos los campos de una expresión se evalúan como true, la expresión también se evalúa como true. Una expresión vacía ({}) se evalúa como true.

Los campos de expresión se evalúan según las siguientes reglas:

  • Si un nombre de campo expandido coincide con su valor, se evalúa como true.

  • Si el valor de un campo es una expresión incrustada, su evaluación es la misma que la de dicha expresión.Consulte Expresiones incrustadas.

Nota

Si una regla no usa explícitamente la %%args expansión %%root o, los nombres de campo de expresión buscan argumentos o campos de documento con el mismo nombre de forma predeterminada. Por ejemplo, la expresión { "url": "https://www.example.com" } evalúa el valor de forma predeterminada con respecto a %%args.url en una regla de servicio y a %%root.url en una regla de MongoDB.

Una expansión es una variable que representa un valor dinámico en una expresión. Las expansiones se indican con dos signos de porcentaje seguidos del nombre de la expansión. Son:

  • %%root, que representa los datos en un documento MongoDB.

  • %%user, que representa a un usuario que interactúa con su aplicación.

  • %%request, que representa una solicitud entrante.

  • %%values, que representa un valor estático.

  • %%environment, que representa el entorno de su aplicación.

  • %%args, que representa los argumentos que se pasaron a una acción de servicio.

Cuando su aplicación evalúa una expresión, reemplaza cada expansión en la expresión con un valor específico determinado por la configuración de su aplicación y el contexto en el momento de la evaluación.

Ejemplo

El siguiente ejemplo utiliza las expansiones %%user y %%root en una expresión "aplicar cuando":

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

Nota

Algunas expansiones, como, están disponibles en todas las %%user %%root expresiones. Otras se limitan a contextos específicos, como, que no es compatible con Sync y solo está disponible en expresiones que operan en un documento.

Al usar la Sincronización de dispositivos, las expansiones tienen restricciones especiales.Consulta Expansiones compatibles con la sincronización.

%%true
Type: boolean
Usable In: Any Expression

Se evalúa como true. Úselo para afirmar que una expresión anidada debe evaluarse como true.

%%false
Type: boolean
Usable In: Any Expression

Se evalúa como false. Úselo para afirmar que una expresión anidada debe evaluarse como false.

%%values
Type: object
Usable In: Any Expression

Representa los valores de la aplicación. Cada campo del objeto asigna un nombre de valor a su valor JSON o secreto correspondiente.

Ejemplo

La siguiente expresión se evalúa como true si el valor admin_ids es una lista que contiene el ID de la cuenta del usuario:

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

Representa el entorno de la aplicación actual. Puede leer el nombre del entornotag () y acceder a los valores del entorno.

Cada propiedad del objeto asigna el nombre de un valor de entorno a su valor en el entorno actual.

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

Ejemplo

La siguiente es una expresión de regla que evalúa como true si el entorno actual es "production" y el valor del entorno "baseUrl" está definido:

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

Representa la solicitud entrante.

{
"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

Representa al usuario que inició la solicitud. El objeto de usuario contiene información de la cuenta, metadatos de los proveedores de autenticación y datos personalizados de la aplicación.

{
"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

El ID del usuario autenticado.

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

El tipo de usuario que inició la solicitud. Se evalúa como "server" para usuarios con clave API y como "normal" para todos los demás usuarios.

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

Los datos personalizados del usuario. El contenido exacto varía según la configuración de datos de usuario personalizados.

Ejemplo

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

Los metadatos del usuario. El contenido exacto variará según las identidades del proveedor de autenticación asociadas al usuario.

Ejemplo

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

Una lista de todas las identidades de proveedores de autenticación asociadas al usuario. Una identidad consiste en un identificador único que un proveedor de autorización le otorga al usuario, junto con el tipo de proveedor:

Ejemplo

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

El valor de un campo particular tal como existe al final de una operación de base de datos.

%%prev
Type: any

El valor de un campo particular antes de que sea cambiado por una operación de escritura.

%%root
Type: object

El documento completo tal como existe al final de una operación de base de datos.

%%prevRoot
Type: object

El documento completo antes de que sea modificado por una operación de escritura.

Ejemplo

La siguiente es una expresión de validación de esquema MongoDB que evalúa como true si el documento existía previamente (es decir, la acción no es una inserción) o el campo status del documento tiene un valor de "new":

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

Un documento que contiene los valores pasados ​​como argumentos a una acción de servicio. Se puede acceder a cada argumento por el nombre de su parámetro.

Ejemplo

La siguiente es una regla de servicio de Twilio que evalúa true si el número de teléfono del remitente (el from argumento) coincide con un valor específico:

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

(Solosincronización basada en particiones). El valor de la clave de partición de la partición actual que se está evaluando.

Un operador de expresión representa una acción u operación dentro de una expresión. Los operadores toman uno o más argumentos y evalúan un valor de resultado. El tipo y el valor del resultado dependen del operador utilizado y de los argumentos que se le pasen.

Los operadores de expresión se representan mediante cadenas que comienzan con un solo signo de porcentaje (%) o un signo de dólar ($). Se pueden usar en cualquier expresión.

Los siguientes operadores le permiten convertir valores entre representaciones EJSON y JSON:

%stringToOid

Convierte una cadena de 12bytes o 24bytes en un objeto EJSON objectId.

Ejemplo

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

Convierte un objeto EJSON objectId en una cadena.

Ejemplo

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

Convierte una cadena de 36bytes en un objeto EJSON UUID.

Ejemplo

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

Convierte un objeto EJSON UUID en una cadena.

Ejemplo

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

Importante

Sin operaciones internas

%stringToUuid%uuidToString%stringToOid,, y no evalúan operadores JSON. Debe proporcionar una cadena literal/objeto EJSON o una expansión que evalúe a %oidToString uno.

Los siguientes operadores le permiten llamar funciones en su aplicación App Services:

%function

Llama a una función con el nombre y los argumentos especificados. Evalúa el valor que devuelve la función.

Ejemplo

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

Los siguientes operadores le permiten determinar si un valor existe en un objeto o matriz:

$exists

Comprueba si el campo al que está asignado tiene algún valor. Evalúa el resultado como un valor booleano.

Ejemplo

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

Comprueba si una matriz de valores especificada contiene el valor del campo al que está asignado este operador. Evalúa el resultado como un valor booleano.

Ejemplo

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

Comprueba una matriz de valores especificada para ver si contiene el valor del campo al que está asignado este operador. Evalúa el resultado como un valor booleano.

Ejemplo

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

Los siguientes operadores le permiten comparar valores, incluidos valores expandidos:

$eq

Comprueba si el campo al que está asignado es igual al valor especificado. Evalúa el resultado como un valor booleano.

Ejemplo

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

Comprueba si el campo al que está asignado no es igual al valor especificado. Evalúa el resultado como un valor booleano.

Ejemplo

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

Comprueba si el campo al que está asignado es estrictamente mayor que el valor especificado. Evalúa el resultado como un valor booleano.

Ejemplo

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

Comprueba si el campo al que está asignado es mayor o igual que el valor especificado. Evalúa el resultado como un valor booleano.

Ejemplo

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

Comprueba si el campo al que está asignado es estrictamente menor que el valor especificado. Evalúa el resultado como un valor booleano.

Ejemplo

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

Comprueba si el campo al que está asignado es menor o igual que el valor especificado. Evalúa el resultado como un valor booleano.

Ejemplo

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

Volver

Permisos basados ​​en roles

En esta página