Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Define Data Access Permissions

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.

Puedes definir expresiones sencillas y estáticas 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:

A "dynamic" expression that varies based on the requesting user and their IP location
{
"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 }
]
}
}

When you have more than one field in an expression, that expression evaluates to true if and only if every field in the expression evaluates to true. In other words, App Services treats multiple fields in a single expression as an "AND" operation.

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 evaluates expressions by first replacing expansions with their runtime values and then evaluating each field of the expanded expression document to a boolean expression. If all fields in an expression evaluate to true, the expression also evaluates to true. An empty expression ({}) evaluates to true.

Expression fields evaluate based on the following rules:

  • 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, which represents a user interacting with your app.

  • %%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 tu aplicación evalúa una expresión, reemplaza cada expansión en la expresión por un valor específico determinado por la configuración de la 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 utilizar Device Sync, las expansiones tienen restricciones especiales. Consulta Expansiones Compatibles con Sync.

%%true
Type: boolean
Usable In: Any Expression

Evaluates to true. Use this to assert that a nested expression must evaluate to true.

%%false
Type: boolean
Usable In: Any Expression

Evaluates to false. Use this to assert that a nested expression must evaluate to 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.

Each property of the object maps the name of an environment value to its value in the current environment.

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

Ejemplo

La siguiente es una expresión de regla que evalúa en 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

The authenticated user's id.

%%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

A list of all authentication provider identities associated with the user. An identity consists of a unique identifier given to a user by an authorization provider along with the provider's type:

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 modificado 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. Puedes acceder a cada argumento por su nombre de parámetro.

Ejemplo

The following is a Twilio service rule that evaluates to true if the sender's phone number (the from argument) matches a specific value:

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

An expression operator represents an action or operation within an expression. Operators take in one or more arguments and evaluate to a result value. The type and value of the result depends on the operator you use and the arguments you pass to it.

Expression operators are denoted by strings that begin with either a single percent sign (%) or a dollar sign ($). You can use them in any expression.

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

%stringToOid

Convierte una cadena de 12 o 24 bytes 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

Converts a 36-byte string to an EJSON UUID object.

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.

The following operators allow you to call functions in your App Services application:

%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]
}
}
}

The following operators allow you to determine if a value exists in an object or array:

$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

Checks if the field it is assigned to is equal to the specified value. Evaluates to a boolean representing the result.

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

Verifica si el campo al que se le asigna es estrictamente mayor que el valor especificado. Evalúa a un booleano que representa el resultado.

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

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

Ejemplo

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

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

Ejemplo

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

Volver

Permisos basados ​​en roles

En esta página