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
- Acesse /Login.
- Informe Login e Senha.
- Após autenticar, suas claims (Id, Nome, E-mail, CPF, Owner, Permissões, Perfil) são gravadas no cookie de sessão.
- O cookie tem expiração deslizante (
SlidingExpiration) — cada request autenticada renova o tempo configurado emSystemCore: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
- Clique em Novo Usuário.
- Preencha
Login(mínimo 6 caracteres),Nome(mínimo 4),E-mailválido,Senha(mínimo 8). - Selecione o Status: Ativo, Inativo, Bloqueado ou Senha Expirada.
- CPF é opcional, com exatamente 11 dígitos quando informado.
- 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
DeletedAtmas 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
- Clique em Novo Perfil.
- Informe Nome (obrigatório) e Descrição.
- Salve para abrir a tela de atribuição de permissões.
Atribuir permissões ao perfil
- Clique em Permissões na linha do perfil.
- O modal lista todas as permissões agrupadas por módulo (Controle de Usuários, Logs de Erros, etc.).
- 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:
- Adicione um valor numérico ao final de
PageNamesBase. - Insira a linha equivalente em
PermissionSeed.SeedDatacomController/Actioncorrespondentes. - No controller, chame
CheckPermissions((int)PageNamesBase.SuaNovaPermissao)na ação a proteger.
Permissões especiais
| Valor | Significado |
|---|---|
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étodo | Rota | Descrição |
|---|---|---|
| GET | /system/user | Lista usuários paginados. |
| GET | /system/user/{id} | Obtém um usuário. |
| GET | /system/role | Lista perfis. |
| GET | /system/dataaudit | Lista registros de auditoria. |
| GET | /system/logerror | Lista erros (exclui Track). |
| GET | /system/logtrack | Lista 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).orderDir—ascoudesc.
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.