Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Implementar redação em nível de campo

Nesta página

  • Procedimento

O operador de pipeline $redact restringe o conteúdo dos documentos com base nas informações armazenadas nos próprios documentos.

Diagrama da arquitetura de segurança com middleware e redação.

Para armazenar os dados dos critérios de acesso, adicione um campo aos documentos e documentos incorporados. Para permitir várias combinações de níveis de acesso para os mesmos dados, considere definir o campo de acesso para uma array de arrays. Cada elemento de array contém um conjunto necessário que permite a um usuário com esse conjunto acessar os dados.

Em seguida, inclua a etapa $redact na operação db.collection.aggregate() para restringir o conteúdo do conjunto de resultados baseado no acesso exigido para visualizar os dados.

Para obter mais informações sobre o operador de pipeline $redact, incluindo sintaxe, variáveis de sistema associadas e exemplos adicionais, consulte $redact.

Por exemplo, uma coleção forecasts contém documentos do seguinte formulário onde o campo tags determina os níveis de acesso exigidos para visualizar os dados:

{
_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, o campo tags contém vários agrupamentos de acesso necessários para exibir os dados. Por exemplo, o valor [ [ "G" ], [ "FDW", "TGE" ] ] pode especificar que um usuário exige acesso nível ["G"] ou ambos [ "FDW", "TGE" ] para visualizar os dados.

Considere um usuário que só tem acesso para visualizar informações marcadas com "FDW" ou "TGE". Para executar uma query em todos os documentos com o ano 2014 para esse usuário, inclua um estágio $redact como no seguinte:

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"
}
}
}
]
)

A operação de aggregation retorna o seguinte documento "editado" para o usuário:

{ "_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" ] ]
}
]
}

Dica

Veja também:

← Configurar firewall do Windows netsh para MongoDB

Nesta página