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

Implementar la restricción a Nivel de Campo

La $redact El operador de pipeline restringe el contenido de los documentos en función de la información almacenada en los propios documentos.

Diagrama de arquitectura de seguridad con middleware y restricción.

Para almacenar los datos de criterios de acceso, añade un campo a los documentos y documentos incrustados. Para permitir varias combinaciones de niveles de acceso para los mismos datos, considera establecer el campo de acceso como un arreglo de arreglos. Cada elemento del arreglo contiene un conjunto requerido que permite a un usuario con ese conjunto acceder a los datos.

Luego, incluya la etapa $redact en la operación db.collection.aggregate() para restringir el contenido del conjunto de resultados según el acceso requerido para ver los datos.

Para obtener más información sobre el operador de pipeline $redact, incluyendo su sintaxis y las variables del sistema asociadas, así como ejemplos adicionales, consulta $redact.

Por ejemplo, una colección forecasts contiene documentos del siguiente formato donde el campo tags determina los niveles de acceso necesarios para ver los datos:

{
_id: 1,
title: "123 Department Report",
tags: [ [ "G" ], [ "FDW" ] ],
year: 2014,
subsections: [
{
subtitle: "Section 1: Overview",
tags: [ [ "SI", "G" ], [ "FDW" ] ],
content: "Section 1: This is the content of section 1."
},
{
subtitle: "Section 2: Analysis",
tags: [ [ "STLW" ] ],
content: "Section 2: This is the content of section 2."
},
{
subtitle: "Section 3: Budgeting",
tags: [ [ "TK" ], [ "FDW", "TGE" ] ],
content: {
text: "Section 3: This is the content of section3.",
tags: [ [ "HCS"], [ "FDW", "TGE", "BX" ] ]
}
}
]
}

Para cada documento, el campo tags contiene varias agrupaciones de acceso necesarias para ver los datos. Por ejemplo, el valor [ [ "G" ], [ "FDW", "TGE" ] ] puede especificar que un usuario requiere el nivel de acceso ["G"] o ambos [ "FDW", "TGE" ] para ver los datos.

Considera un usuario que solo tiene acceso para ver la información etiquetada con "FDW" o "TGE". Para ejecutar una consulta en todos los documentos del año 2014 de este usuario, incluye una etapa $redact como se muestra a continuación:

var userAccess = [ "FDW", "TGE" ];
db.forecasts.aggregate(
[
{ $match: { year: 2014 } },
{ $redact:
{
$cond: {
if: { $anyElementTrue:
{
$map: {
input: "$tags" ,
as: "fieldTag",
in: { $setIsSubset: [ "$$fieldTag", userAccess ] }
}
}
},
then: "$$DESCEND",
else: "$$PRUNE"
}
}
}
]
)

La operación de agregación devuelve el siguiente documento "redactado" para el usuario:

{ "_id" : 1,
"title" : "123 Department Report",
"tags" : [ [ "G" ], [ "FDW" ] ],
"year" : 2014,
"subsections" :
[
{
"subtitle" : "Section 1: Overview",
"tags" : [ [ "SI", "G" ], [ "FDW" ] ],
"content" : "Section 1: This is the content of section 1."
},
{
"subtitle" : "Section 3: Budgeting",
"tags" : [ [ "TK" ], [ "FDW", "TGE" ] ]
}
]
}

Tip

Volver

$redact

En esta página