EZ.Redact.Lgpd.EntityFramework 2.1.0

dotnet add package EZ.Redact.Lgpd.EntityFramework --version 2.1.0
                    
NuGet\Install-Package EZ.Redact.Lgpd.EntityFramework -Version 2.1.0
                    
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.EntityFramework" Version="2.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EZ.Redact.Lgpd.EntityFramework" Version="2.1.0" />
                    
Directory.Packages.props
<PackageReference Include="EZ.Redact.Lgpd.EntityFramework" />
                    
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.EntityFramework --version 2.1.0
                    
#r "nuget: EZ.Redact.Lgpd.EntityFramework, 2.1.0"
                    
#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.EntityFramework@2.1.0
                    
#: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.EntityFramework&version=2.1.0
                    
Install as a Cake Addin
#tool nuget:?package=EZ.Redact.Lgpd.EntityFramework&version=2.1.0
                    
Install as a Cake Tool

EZ.Redact.Lgpd.EntityFramework

NuGet Version License: MIT .NET 8.0+

Extensão do Entity Framework Core para o EZ.Redact.Lgpd.Core. Redige dados pessoais automaticamente durante a leitura de entidades, sem precisar chamar ILGPDRedactService manualmente.

Basta decorar suas models com os atributos do EZ.Redact.Lgpd.Core e usar UseRedaction() na query — a redação acontece de forma transparente no momento da materialização.


Instalação

dotnet add package EZ.Redact.Lgpd.EntityFramework

Registre os serviços no DI:

using Microsoft.Extensions.DependencyInjection;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddLGPDRedaction()
                .AddEntityFrameworkRedaction(options =>
                {
                    options.UseDbContext<AppDbContext>();
                });

AddEntityFrameworkRedaction() registra o LgpdRedactionInterceptor e o configura automaticamente nos DbContexts especificados.

Exemplo rápido

using EZ.Redact.Lgpd.EntityFramework;

var clientes = await _db.Clientes
    .UseRedaction()
    .Where(c => c.Ativo)
    .ToListAsync();

Todos os dados sensíveis decorados com atributos LGPD serão redigidos automaticamente na materialização da entidade.

Configuração

LGPDRedactOptions

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": "#",
    "Guid": { "PrefixHexCount": 6 },
    "HmacFor": ["CPF"],
    "HmacKeyId": 1
  }
}

A HmacKey não deve ficar no appsettings.json. Use variável de ambiente ou User Secrets:

export LGPD__HmacKey="suachavebase64aqui=="

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

Decore suas entidades com os atributos do EZ.Redact.Lgpd.Core:

using EZ.Redact.Lgpd.Core.Attributes;

public class Cliente
{
    public int Id { get; set; }

    [NomeData]
    public string Nome { get; set; } = string.Empty;

    [CPFData]
    public string Cpf { get; set; } = string.Empty;

    [EmailData]
    public string Email { get; set; } = string.Empty;

    [TelefoneData]
    public string Telefone { get; set; } = string.Empty;

    [EnderecoData]
    public string Endereco { get; set; } = string.Empty;

    public string Observacao { get; set; } = string.Empty;
}

Consulta com redação

Use UseRedaction() na query para ativar a redação:

using EZ.Redact.Lgpd.EntityFramework;

var clientes = await _db.Clientes
    .UseRedaction()
    .Where(c => c.Ativo)
    .ToListAsync();

Consulta sem redação

Sem UseRedaction(), os dados retornam sem alteração:

var clientes = await _db.Clientes
    .Where(c => c.Ativo)
    .ToListAsync();

Saída redigida

Campo Original Redigido
Nome Felipe Siqueira F***** S*******
Cpf 123.456.789-09 123.***.***-09
Email felipe.siqueira@email.com f**************@email.com
Telefone (11) 9 8888-4444 (11) 9 ****-4444
Endereco Avenida Paulista, 1000 A****** P*******, ****

Como funciona

  1. UseRedaction() adiciona TagWith("lgpd-redact") na query, que vira um comentário no SQL gerado
  2. O LgpdRedactionInterceptor implementa IDbCommandInterceptor e IMaterializationInterceptor
  3. Antes da execução, o interceptor verifica se o comando SQL contém a tag -- lgpd-redact
  4. Durante a materialização de cada entidade, as propriedades marcadas com atributos LGPD são inspecionadas via delegates compilados (performance em memória)
  5. Para cada propriedade com valor string, o ILGPDRedactService.Redact() é chamado e o valor é substituído

A redação só ocorre em operações de leitura (SELECT). Operações de INSERT, UPDATE e DELETE nunca são afetadas.


Atributos Suportados

Os atributos são definidos pelo pacote EZ.Redact.Lgpd.Core e funcionam com qualquer entidade do EF Core.

Identificação Pessoal

Atributo O que faz? Exemplo Original Exemplo Redigido
[NomeData] Mantém apenas as iniciais de cada palavra Maria da Silva M**** d* S****
[CPFData] Preserva 3 primeiros e 2 últimos dígitos 123.456.789-01 123.***.***-01
[CNPJData] Preserva raiz (2 caracteres) e radical (6 últimos) 12.345.678/0001-90 12.***.***/0001-90
[EmailData] Preserva inicial e domínio felipe.siqueira@gmail.com f**************@gmail.com
[TelefoneData] Preserva DDD, 1 dígito após DDD e 4 últimos (11) 98888-4444 (11) 9****-4444
[EnderecoData] Mantém apenas as iniciais, oculta números Avenida Paulista, 1000 A****** P*******, ****
[DataGenericaData] Preserva ano, mascara dia/mês 15/03/1990 **/**/1990

Documentos Oficiais

Atributo O que faz? Exemplo Original Exemplo Redigido
[CNHData] Preserva 3 primeiros e 2 últimos dígitos 12345678901 123******01
[TituloEleitorData] Preserva 4 primeiros e 4 últimos dígitos 1234.5678.9012 1234.****.9012
[PISData] Preserva 3 primeiros e dígito verificador 123.45678.90-1 123.*****.**-1
[CNSData] Preserva 3 primeiros e 4 últimos 123 4567 8901 2345 123 **** **** 2345
[CTPSData] Preserva 3 primeiros e 3 últimos 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 últimos dígitos AB123456 AB****56
[RNEData] Preserva letra prefixo e dígito verificador V1234567-8 V*******-8

Financeiro

Atributo O que faz? Exemplo Original Exemplo Redigido
[CartaoCreditoData] Preserva 4 primeiros e 4 últimos dígitos 4532 1178 9012 3456 4532 **** **** 3456
[ContaBancariaData] Preserva operação e dígito, mascara conta 013.123456-7 013.******-7
[PixData] Mascara chave aleatória mantendo 4 primeiros e 8 últimos e8d26618-2e11-4b22-8d26-66182e114b22 e8d2****-****-****-****-****2e114b22

Redes e Localização

Atributo O que faz? Exemplo Original Exemplo Redigido
[EnderecoIPData] Mascara os 2 últimos octetos (IPv4) e os últimos 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 últimos dígitos 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 números (padrão antigo) e caracteres após prefixo (Mercosul) ABC-1234 ABC-****
[RenavamData] Preserva 3 primeiros e 3 últimos dígitos 12345678901 123*****901

Técnico

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

Samples

Um projeto de exemplo na pasta samples/:

Projeto Descrição
EZ.Redact.Lgpd.EntityFramework.Sample Minimal API com InMemory Database e endpoints /clientes/redacted, /clientes/raw e /publico/clientes
dotnet run --project samples/EZ.Redact.Lgpd.EntityFramework.Sample
curl http://localhost:5000/clientes/redacted
curl http://localhost:5000/clientes/raw

Projetos Relacionados

Projeto Descrição
EZ.Redact.Lgpd.Core Biblioteca base de redação de dados sensíveis LGPD
EZ.Redact.Lgpd.Json Extensão para redação de dados em serialização JSON
EZ.Redact.Lgpd.MongoDb Extensão para redação de dados em consultas MongoDB
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.0 131 5/25/2026