Docs Menu
Docs Home
/
Manual de base de datos
/

Implementar redacción a nivel de campo

El $redact El operador del oleoducto restringe el contenido de los documentos basándose en la información almacenada en los propios documentos.

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

Para almacenar los datos de los criterios de acceso, agregue un campo a los documentos y a los documentos incrustados. Para permitir múltiples combinaciones de niveles de acceso para los mismos datos, considere configurar el campo de acceso como una matriz de matrices. Cada elemento de la matriz contiene un conjunto obligatorio que permite a un usuario con dicho 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 $redact operador de canalización, incluida su sintaxis y las variables de sistema asociadas, así como ejemplos adicionales,$redact consulte.

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.

Considere un usuario que solo tiene acceso para ver la información etiquetada con "FDW" "TGE"o. Para ejecutar una consulta en todos los documentos con el año 2014 para este usuario, incluya una etapa como la $redact siguiente:

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

Mensajes de auditoría

En esta página