EZ.Redact.Lgpd.MongoDb 2.1.1

dotnet add package EZ.Redact.Lgpd.MongoDb --version 2.1.1
                    
NuGet\Install-Package EZ.Redact.Lgpd.MongoDb -Version 2.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EZ.Redact.Lgpd.MongoDb" Version="2.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EZ.Redact.Lgpd.MongoDb" Version="2.1.1" />
                    
Directory.Packages.props
<PackageReference Include="EZ.Redact.Lgpd.MongoDb" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EZ.Redact.Lgpd.MongoDb --version 2.1.1
                    
#r "nuget: EZ.Redact.Lgpd.MongoDb, 2.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EZ.Redact.Lgpd.MongoDb@2.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EZ.Redact.Lgpd.MongoDb&version=2.1.1
                    
Install as a Cake Addin
#tool nuget:?package=EZ.Redact.Lgpd.MongoDb&version=2.1.1
                    
Install as a Cake Tool

EZ.Redact.Lgpd.MongoDb

NuGet Version License: MIT .NET 8.0+

Extensão MongoDB para o EZ.Redact.Lgpd.Core. Redige dados pessoais automaticamente durante a leitura de documentos no MongoDB, sem precisar chamar ILGPDRedactService manualmente.

Basta decorar suas models com os atributos do EZ.Redact.Lgpd.Core e usar .UseRedaction() nas queries — a redação acontece de forma transparente.


Instalação

dotnet add package EZ.Redact.Lgpd.MongoDb

Registre os serviços no DI:

using Microsoft.Extensions.DependencyInjection;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddLGPDRedaction()
                .AddMongoDbRedaction();

AddMongoDbRedaction() registra o suporte a redação em queries MongoDB.

Exemplo rápido

using EZ.Redact.Lgpd.MongoDb;

var collection = db.GetCollection<Cliente>("clientes");
var comRedacao = await collection
    .UseRedaction()
    .Find(c => c.Ativo)
    .ToListAsync();

Todos os dados sensíveis decorados com atributos LGPD serão redigidos automaticamente nos documentos retornados.

Configuração

Refere-se às opções do pacote EZ.Redact.Lgpd.Core:

Propriedade Padrão Descrição
MaskChar '*' Caractere usado no mascaramento
Guid new() Opções de redação de GUID (ver abaixo)
HmacKey null Chave HMAC em Base64 (obrigatória se HmacFor não estiver vazio)
HmacKeyId 1 Identificador da chave para rotação
HmacFor HashSet<> vazio Tipos de dado que devem usar HMAC em vez de masking

GuidOptions

Propriedade Padrão Descrição
PrefixHexCount 4 Quantidade de hex digits preservados no prefixo
SuffixHexCount 4 Quantidade de hex digits preservados no sufixo

Três formas de configurar

1. Em código (Action<LGPDRedactOptions>)

builder.Services.AddLGPDRedaction(options =>
{
    options.MaskChar = '#';
    options.Guid.PrefixHexCount = 6;
    options.HmacKey = Convert.ToBase64String(RandomNumberGenerator.GetBytes(32));
    options.HmacFor.Add(DadoPessoal.CPF);
});

2. Via IConfiguration (appsettings.json + env vars)

builder.Services.AddLGPDRedaction(builder.Configuration);
{
  "LGPD": {
    "MaskChar": "#",
    "HmacFor": ["CPF"],
    "HmacKeyId": 1
  }
}

3. Combinando ambas

builder.Services.AddLGPDRedaction(options =>
{
    options.HmacKey = Convert.ToBase64String(RandomNumberGenerator.GetBytes(32));
});
builder.Services.PostConfigure<LGPDRedactOptions>(opts =>
{
    opts.HmacFor.Add(DadoPessoal.CPF);
});

Uso

Adicione .UseRedaction() à sua collection para que os documentos retornados tenham os dados sensíveis redigidos automaticamente:

using EZ.Redact.Lgpd.Core;
using EZ.Redact.Lgpd.Core.Attributes;
using EZ.Redact.Lgpd.MongoDb;
using MongoDB.Driver;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddLGPDRedaction()
    .AddMongoDbRedaction();

builder.Services.AddSingleton<IMongoClient>(
    _ => new MongoClient("mongodb://localhost:27017"));
builder.Services.AddSingleton(sp =>
{
    var client = sp.GetRequiredService<IMongoClient>();
    return client.GetDatabase("exemplo");
});

var app = builder.Build();

app.MapGet("/clientes", async (IMongoDatabase db) =>
{
    var collection = db.GetCollection<Cliente>("clientes");

    var comRedacao = await collection
        .UseRedaction()
        .Find(c => c.Ativo)
        .ToListAsync();

    var semRedacao = await collection
        .Find(c => c.Ativo)
        .ToListAsync();

    return Results.Ok(new { comRedacao, semRedacao });
});

app.Run();

Sem redação

Basta omitir .UseRedaction() na mesma collection — a query executa normalmente sem redação:

var clientes = await collection
    .Find(c => c.Ativo)
    .ToListAsync();

Modelo com atributos

public class Cliente
{
    [CPFData]
    public string? Cpf { get; set; }

    [NomeData]
    public string? Nome { get; set; }

    [EmailData]
    public string? Email { get; set; }

    public bool Ativo { get; set; }
}

Resultado redigido

{
  "comRedacao": [
    {
      "cpf": "123.***.***-01",
      "nome": "J*** S****",
      "email": "j*****@gmail.com",
      "ativo": true
    }
  ],
  "semRedacao": [
    {
      "cpf": "123.456.789-01",
      "nome": "João Silva",
      "email": "joao.silva@gmail.com",
      "ativo": true
    }
  ]
}

Como funciona

  1. UseRedaction() envolve IMongoCollection<T> em um wrapper que intercepta as operações de leitura
  2. Quando Find(), FindAsync() ou FindSync() é chamado, os cursores retornados são encapsulados
  3. Ao materializar cada documento, o RedactionHelper inspeciona as propriedades via reflection com cache (ConcurrentDictionary)
  4. Propriedades com DataClassificationAttribute de taxonomia "LGPD" são redigidas através do ILGPDRedactService
  5. O serviço de redação respeita as configurações de environment definidas em AddLGPDRedaction() — quando a redação está desabilitada, os dados retornam inalterados

Atributos Suportados

Os atributos são definidos pelo pacote EZ.Redact.Lgpd.Core e funcionam com qualquer provedor de dados.

Identificação Pessoal

Atributo O que faz? Exemplo Original Exemplo Redigido
[NomeData] Mantem apenas as iniciais de cada palavra Maria da Silva M**** d* S****
[CPFData] Preserva 3 primeiros e 2 ultimos digitos 123.456.789-01 123.***.***-01
[CNPJData] Preserva raiz (2 caracteres) e radical (6 ultimos) 12.345.678/0001-90 12.***.***/0001-90
[EmailData] Preserva inicial e dominio joao.silva@gmail.com j********@gmail.com
[TelefoneData] Preserva DDD, 1 digito apos DDD e 4 ultimos (11) 98888-4444 (11) 9****-4444
[EnderecoData] Mantem apenas as iniciais, oculta numeros Avenida Paulista, 1000 A****** P*******, ****
[DataGenericaData] Preserva ano, mascara dia/mes 15/03/1990 **/**/1990

Documentos Oficiais

Atributo O que faz? Exemplo Original Exemplo Redigido
[CNHData] Preserva 3 primeiros e 2 ultimos digitos 12345678901 123******01
[TituloEleitorData] Preserva 4 primeiros e 4 ultimos digitos 1234.5678.9012 1234.****.9012
[PISData] Preserva 3 primeiros e digito verificador 123.45678.90-1 123.*****.**-1
[CNSData] Preserva 3 primeiros e 4 ultimos 123 4567 8901 2345 123 **** **** 2345
[CTPSData] Preserva 3 primeiros e 3 ultimos 1234567890 123****890
[CertidaoData] Preserva 6 primeiros e 2 verificadores 123456.78.1234.5.6.7890.1.12345-67 123456.**.****.*.*.****.*.*****-67
[PassaporteData] Preserva prefixo letras e 2 ultimos digitos AB123456 AB****56
[RNEData] Preserva letra prefixo e digito verificador V1234567-8 V*******-8

Financeiro

Atributo O que faz? Exemplo Original Exemplo Redigido
[CartaoCreditoData] Preserva 4 primeiros e 4 ultimos digitos 4532 1178 9012 3456 4532 **** **** 3456
[ContaBancariaData] Preserva operacao e digito, mascara conta 013.123456-7 013.******-7
[PixData] Mascara chave aleatoria mantendo 4 primeiros e 8 ultimos e8d26618-2e11-4b22-8d26-66182e114b22 e8d2****-****-****-****-****2e114b22

Redes e Localização

Atributo O que faz? Exemplo Original Exemplo Redigido
[EnderecoIPData] Mascara os 2 ultimos octetos (IPv4) e os ultimos 3 grupos (IPv6) 192.168.1.100 192.168.*.***
[MacAddressData] Preserva prefixo OUI (3 primeiros bytes) 00:1A:2B:3C:4D:5E 00:1A:2B:**:**:**
[CEPData] Mascara os 3 ultimos digitos 01310-900 01310-***
[GeolocalizacaoData] Mascara parte decimal de latitude e longitude -23.5505, -46.6333 -23.****, -46.****

Veículo

Atributo O que faz? Exemplo Original Exemplo Redigido
[PlacaData] Mascara numeros (padrao antigo) e caracteres apos prefixo (Mercosul) ABC-1234 ABC-****
[RenavamData] Preserva 3 primeiros e 3 ultimos digitos 12345678901 123*****901

Técnico

Atributo O que faz? Exemplo Original Exemplo Redigido
[GuidData] Mascara GUID mantendo 4 primeiros e 4 ultimos hex digitos e8d26618-2e11-4b22-8d26-66182e114b22 e8d2****-****-****-****-*******4b22

Samples

Um projeto de exemplo na pasta samples/:

Projeto Descrição
EZ.Redact.Lgpd.MongoDb.SampleApi Minimal API com endpoints /clientes com e sem redação
dotnet run --project samples/EZ.Redact.Lgpd.MongoDb.SampleApi
curl http://localhost:5000/clientes | jq

Projetos Relacionados

Projeto Descrição
EZ.Redact.Lgpd.Core Biblioteca base de redação de dados sensíveis LGPD
EZ.Redact.Lgpd.EntityFramework Extensão para redação de dados em consultas Entity Framework
EZ.Redact.Lgpd.Json Extensão para redação de dados em serialização JSON
EZ.Redact.Lgpd.Xml Extensão para redação de dados em serialização XML

Licença

Distribuído sob a licença MIT.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.1.1 130 5/25/2026