ETL Sistemas

1. Visão Geral

O SystemCore é a plataforma base da ETL Sistemas para autenticação, controle de acesso, auditoria e logging de aplicações .NET. Esta tela reúne o passo-a-passo de uso de cada módulo disponível.

Principais funcionalidades
  • Autenticação por formulário com cookie sliding (renovação automática a cada request).
  • Controle de perfis (roles) e permissões granular por controller/action.
  • Logs de erros classificados por categoria (Common, Security, Performance).
  • Rastreamento de requisições (LogTrack) com tempo de execução em milissegundos.
  • Auditoria automática de alterações em entidades marcadas com [SystemCoreAuditable].
  • API REST documentada via Swagger com autenticação JWT Bearer.
Convenções desta tela
  • Ações na grade: Visualizar · Editar · Excluir · Permissões.
  • Todas as datas exibidas no formato dd/mm/yyyy hh:mm:ss.
  • Listagens usam paginação servidor-side via DataTables.

2. Login e Autenticação

  1. Acesse /Login.
  2. Informe Login e Senha.
  3. Após autenticar, suas claims (Id, Nome, E-mail, CPF, Owner, Permissões, Perfil) são gravadas no cookie de sessão.
  4. O cookie tem expiração deslizante (SlidingExpiration) — cada request autenticada renova o tempo configurado em SystemCore:Session:AuthCookieTimeoutMinutes.
Status do usuário
  • Ativo: login normal.
  • Inativo: bloqueado de logar — mensagem "Usuário Inativo".
  • Bloqueado: idem, mensagem "Usuário Bloqueado".
  • Senha Expirada: força troca antes de continuar.
Logout

O logout é disparado pelo menu superior. O usuário é redirecionado para o controller configurado em SystemCore:LogoutRedirectController (padrão: Home).

3. Tela Inicial

A Home (/) é acessível anonimamente. Após o login, o menu lateral ("Configurações") expõe apenas os módulos para os quais o perfil do usuário possui permissão.

Usuários Owner (definidos em SystemCore:UserDefault) enxergam todos os itens sem checagem de permissão.

4. Controle de Usuários

Rota: /User/Index

Listagem
  • Tabela paginada com Nome, Login, E-mail, Status.
  • Ordenação por qualquer coluna (clique no cabeçalho).
  • Botões de exportar (CSV, Excel, PDF, Print, Copy).
Criar usuário
  1. Clique em Novo Usuário.
  2. Preencha Login (mínimo 6 caracteres), Nome (mínimo 4), E-mail válido, Senha (mínimo 8).
  3. Selecione o Status: Ativo, Inativo, Bloqueado ou Senha Expirada.
  4. CPF é opcional, com exatamente 11 dígitos quando informado.
  5. Após salvar, atribua perfis ao usuário pelo botão Perfil.
Editar e excluir
  • Editar: altera nome, e-mail, CPF e status. Senha não é editada por aqui — usuário troca pelo próprio perfil.
  • Excluir: exclusão lógica (soft delete) — o registro fica marcado com DeletedAt mas não é apagado.
Atribuir perfis

O modal de perfis permite vincular o usuário a um ou mais perfis. Conforme SystemCore:UserRoleMultiplo, o sistema aceita um ou vários perfis simultâneos.

5. Controle de Perfis

Rota: /Role/Index

Criar perfil
  1. Clique em Novo Perfil.
  2. Informe Nome (obrigatório) e Descrição.
  3. Salve para abrir a tela de atribuição de permissões.
Atribuir permissões ao perfil
  1. Clique em Permissões na linha do perfil.
  2. O modal lista todas as permissões agrupadas por módulo (Controle de Usuários, Logs de Erros, etc.).
  3. Marque as caixas correspondentes ao acesso desejado e salve.

Permissões são gravadas em RolePermission e propagadas para os usuários através de RoleUser. A claim UserPermission no cookie é uma string com os IDs separados por ;.

6. Permissões

As permissões são fixas no enum PageNamesBase e seedadas no banco em PermissionSeed. Para adicionar uma nova:

  1. Adicione um valor numérico ao final de PageNamesBase.
  2. Insira a linha equivalente em PermissionSeed.SeedData com Controller/Action correspondentes.
  3. No controller, chame CheckPermissions((int)PageNamesBase.SuaNovaPermissao) na ação a proteger.
Permissões especiais
ValorSignificado
AllowAnonymous (1002)Acesso público, sem autenticação.
AllowAuthentication (1000)Qualquer usuário autenticado, independente de permissão específica.
NotAllowAuthentication (1001)Disponível apenas para anônimos (ex.: tela de login).

7. Logs de Erros

Rota: /LogError/Index

Lista todos os eventos do tipo Common, Security e Performance. Registros do tipo Track ficam na tela separada de "Logs de Acesso" e nunca aparecem aqui.

Filtrar por tipo
  • Use o dropdown Tipo de Log acima da tabela.
  • Opções: Todos / Common / Security / Performance.
  • A grid recarrega automaticamente ao mudar a seleção.
Visualizar

Visualizar abre um modal com Data, Usuário, URL, StackTrace e Mensagem completa do erro.

Excluir

Excluir remove o registro do log. A ação é confirmada via modal e exige permissão LogErrorDelete.

8. Logs de Acesso (Tracking)

Rota: /LogTrack/Index

Tela dedicada aos registros gerados pelo TrackerMiddleware. Cada request não estática é registrada com método HTTP, URL, status code e tempo decorrido.

Colunas
  • Data: momento da request.
  • URL: caminho completo, incluindo query string.
  • Usuário: nome do usuário autenticado ou vazio para anônimo.
  • Tempo (ms): duração da request medida via Stopwatch.
Habilitar/Desabilitar

Controlado por SystemCore:EnableRequestTracking em appsettings.json. Quando false, o middleware é skip e nada é gravado.

Para que os registros cheguem no banco, o LogDatabaseProvider precisa ter "Track" em LogTypes.

9. Auditoria de Dados

Rota: /DataAudit/Index

Histórico de alterações em entidades marcadas com [SystemCoreAuditable(true, true, "Nome")]. Cada CREATE/UPDATE/DELETE é gravado automaticamente pelo SystemCoreContext.

Colunas
  • Data: quando ocorreu a alteração.
  • UserId / UserName: quem fez a alteração.
  • Action: CREATE, UPDATE ou DELETE.
  • ObjectAffected: identificador da entidade auditada.
  • ObjectData: JSON com { OldValue, NewValue } de cada campo modificado.

10. Configurações

Todas as configurações ficam sob a chave SystemCore em appsettings.json. Cada subchave é mapeada automaticamente para uma classe via [SystemCoreConfigurationSettings("...")].

Principais seções
"SystemCore": {
  "UrlPathBase": "/",
  "TypeLogin": "Form",
  "UserDefault": 1,
  "RoleDefault": 1,
  "UserRoleMultiplo": true,
  "IsEnabledProd": true,
  "EnableRequestTracking": true,
  "LogoutRedirectController": "Home",
  "Database": { "Provider": "MYSQL", "ConnectionString": "..." },
  "Localization": { "DefaultCulture": "pt-BR" },
  "Session": {
    "SessionTimeoutMinutes": 30,
    "AuthCookieTimeoutMinutes": 30
  },
  "Log": {
    "Database": {
      "IsEnabled": true,
      "LogTypes": [ "Common", "Security", "Track" ],
      "MinimumLogLevel": "Information"
    },
    "File": { "IsEnabled": false, "FilePath": "logs/systemcore.log" }
  },
  "Audit": {
    "Database": { "IsEnabled": true },
    "File":     { "IsEnabled": false, "FilePath": "logs/systemcore-audit.log" }
  },
  "Cache": {
    "Memory": { "IsEnabled": true },
    "Redis":  { "IsEnabled": false, "ConnectionString": "localhost:6379" }
  },
  "RateLimit": {
    "Global": { "PermitLimit": 100, "WindowMinutes": 1, "QueueLimit": 10 }
  }
}

11. API REST

A API expõe os mesmos recursos do front em endpoints REST com autenticação JWT Bearer. A documentação interativa está em /swagger.

Endpoints disponíveis
MétodoRotaDescrição
GET/system/userLista usuários paginados.
GET/system/user/{id}Obtém um usuário.
GET/system/roleLista perfis.
GET/system/dataauditLista registros de auditoria.
GET/system/logerrorLista erros (exclui Track).
GET/system/logtrackLista registros de rastreamento.
DELETE/system/logerror/{id}Remove um erro.
DELETE/system/logtrack/{id}Remove um tracking.
Parâmetros de paginação

Todos os endpoints de listagem aceitam:

  • maxItems — itens por página (0 = sem limite).
  • startPage — página inicial (default 1).
  • orderColumn — propriedade para ordenar (case-insensitive).
  • orderDirasc ou desc.

A resposta padrão é:

{
  "data": [ ... ],
  "meta": { "totalRecords": 123, "totalPages": 13 }
}
Autenticação

Envie o header Authorization: Bearer <token> em toda chamada. O token é obtido na API de Token (SystemCore.Application.WebAPI.Token).

12. FAQ e Suporte

Esqueci a senha. Como recuperar?

Solicite a um usuário Owner que abra a edição do seu cadastro e defina uma nova senha provisória. Após o login, troque pelo seu perfil.

O menu lateral está vazio.

Significa que o perfil do usuário não possui nenhuma permissão associada. Peça a um Owner para vincular permissões em Controle de Perfis.

Por que o Log de Acessos está vazio mesmo com EnableRequestTracking = true?

Verifique se "Track" está dentro de SystemCore:Log:Database:LogTypes. Sem isso, o provider de banco descarta as entradas.

A grid mostra "10 de 10" quando há mais registros.

Provavelmente cache do navegador. Force um Ctrl+F5. O contrato é meta.totalRecords retornado pelo controller.

Como expor uma nova entidade ao sistema de auditoria?

Marque a classe com [SystemCoreAuditable(true, true, "NomeAmigavel")]. Qualquer CREATE/UPDATE/DELETE passará a ser gravado automaticamente.

Onde reporto bugs?

Contate o time ETL Sistemas — etl.com.br.