![](https://previews.customer.envatousercontent.com/files/287641257/Audit_InlinePreview.jpg)
Componente Trilha de Auditoria + Código Fonte Completo
Versão v1.0
Introdução
O componente trilha de auditoria armazena ações do banco de dados (Adicionar, Atualizar, Excluir), ações de negócios (você pode especificá-las), envia notificações e registra seus próprios erros, também é dinâmico, pois dá ao usuário a capacidade de especificar [Business actions], [Emails that notifications will be sent to], [Notification’s subject] e [Notification’s Message]você também pode pesquisar todos os dados armazenados pelo componente por métodos predefinidos.
Estrutura: Padrão .net 2.1
Pacotes:
- Microsoft.EntityFrameworkCore.SqlServer 3.1.3
- Newtonsoft.Json 12.0.3
Pacotes Hangfire:
- Hangfire.AspNetCore
- Hangfire.SqlServer
Características :
- Armazene ações de banco de dados e ações de negócios.
- Envie notificações.
- Registre o processo de notificação de envio e tente novamente se falhar.
- Registrar erros.
- Dinâmico: o usuário pode especificar ações e e-mails e especificar se o componente deve enviar notificação quando uma ação específica acontecer.
Recomendação:
use trabalho em segundo plano para executar métodos de componente, para garantir que o tempo de solicitação original não será aumentado.
Tabelas de banco de dados
Auditoria.Ação
para armazenar dados de pesquisa de ações
Auditoria.ActionUserGroup
fazer relação entre [action]e e-mails, portanto, se essa ação acontecer, o componente enviará uma notificação aos e-mails relacionados com a mensagem especificada.
Auditoria.AuditTrail
para armazenar os dados de auditoria
Auditoria.ErrorLog
para registrar os erros do componente
Auditoria.Notificação
para armazenar as notificações que o componente enviará para emails
Auditoria.NotificationLog
para registrar o processo de envio de notificação, o componente armazenará cada tentativa (enviar e-mail) e armazenará se foi feito com sucesso ou não com mensagem de erro
Como registrar
- Em seu projeto, você precisa instalar nugetpackages Hangfire [Hangfire.AspNetCore, Hangfire.SqlServer] ,ou qualquer pacote para realizar processamento em segundo plano.
- Você também precisa implementar[ IEmailService ] interface para enviar e-mails de notificação.
Aula de inicialização
- No método [ConfigureServices]
#região hangfire
//Adiciona serviços Hangfire.
services.AddHangfire(configuração => configuração
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(Configuration.GetConnectionString(“DefaultConnection”), novo SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = verdadeiro,
UsePageLocksOnDequeue = verdadeiro,
DisableGlobalLocks = verdadeiro
}));
//Adiciona o servidor de processamento como IHostedService
serviços.AddHangfireServer();
#endregion
#região Auditoria
services.AddScoped
//Adiciona classesAuditTrail
serviços.AddAuditTrail(Configuration.GetConnectionString(“DefaultConnection”),
nova lista
new AuditActionDto() { ActionCode =”CreateOrder”,SendNotification=true,NotificationFromEmail=”admin@gmail.com“
,NotificationEmails=”ahmed@yahoo.com,ali@hotmail.com”,NotificationSubject=”assunto “
,NotificationMessage=”mensagem de exemplo”},
new AuditActionDto() { ActionCode = “DeleteOrder”,SendNotification=true,NotificationFromEmail=”admin@gmail.com”,
NotificationEmails=”ahmed2@yahoo.com,ali2@hotmail.com”,NotificationSubject=”assunto“,
NotificationMessage=”exemplo de mensagem2” },
new AuditActionDto() { ActionCode = “UpdateOrder”, SendNotification = true},
new AuditActionDto() { ActionCode = “NewUpdateOrder”,SendNotification=false}});
//registra o trabalho em segundo plano para verificar notificações para enviar e-mails
var sp = services.BuildServiceProvider().CreateScope().ServiceProvider;
var notificaçãoService = sp.GetService
JobStorage.Current = novo SqlServerStorage(Configuration.GetConnectionString(“DefaultConnection”),
novas opções de SqlServerStorage
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = verdadeiro,
UsePageLocksOnDequeue = verdadeiro,
DisableGlobalLocks = verdadeiro
});
RecurringJob.AddOrUpdate(() => notificaçãoService.CheckNotificationsAndSend(), Cron.Daily);
#endregion
Como criar tabelas
- Abrir [Package manager console] E no [Default project] lista .. selecione [AuditTrailComponent] projeto
- Escreva os comandos abaixo
- add-migration InitiatAudit -context AuditDbContext
- atualização-banco de dados -context AuditDbContext
Como usar
- Injete esta interface em sua classe [IAuditTrailService]
- Para armazenar ações comerciais
BackgroundJob.Enqueue(() => AuditTrailService.SaveCustomActionsAuditTrailAsync(“DeleteOrder”, “dados de amostra por hangfire”, “username1”));
- Para armazenar ações do banco de dados, use o código abaixo antes do método de salvar alterações da estrutura da entidade
BackgroundJob.Enqueue(() =>AuditTrailService.SaveDbActionsAuditTrailAsync(ApplicationDbContext.ChangeTracker.Entries()
.Selecione(a =>
novo banco de dadosChangesDto
{
Entidade = a.Entidade,
Valores Originais = a.Valores Originais.ToObject(),
ValoresAtual = a.CurrentValues.ToObject()
}).Listar()));
- Para pesquisar dados de auditoria
//Injeta esta interface [IAuditTrailService]
Modelo AuditTrailFilterDto = novo AuditTrailFilterDto {Audit_ActionCode=”DeleteOrder” };
var resultado=aguardar AuditTrailService.Search(modelo);
- Para pesquisar notificações
//Injeta esta interface [INotificationPublicService]
Modelo NotificationFilterDto = novo NotificationFilterDto { Audit_ActionCode=”DeleteOrder” };
var resultado = aguardar NotificationPublicService.SearchNotifications (modelo);
- para procurar o registro de notificação
//Injeta esta interface [IErrorLogPublicService]
Modelo NotificationLogFilterDto = novo NotificationLogFilterDto { };
var resultado = aguarda NotificationService.SearchNotificationLogs(modelo);
- para procurar logs de erros
//Injeta esta interface [IErrorLogPublicService]
ErrorLogFilterDto model4 = new ErrorLogFilterDto();
var resultado = aguarda ErrorLogPublicService.Search(model4);
Artigos Relacionados