Veja em CodeCanyonPreço $10

Nota: este post tem links de afiliados. Ao clicar e fazer compras ganhamos comissões. Obrigado!

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);

Veja em CodeCanyonPreço $10

plugins premium WordPress