Integração com o Banco de Dados

Nesta seção serão detalhados os diferentes objetos (tabelas) presentes no banco de dados e os recursos que você pode utilizar a fim de suportar métodos para inserir, atualizar e excluir informações dele.

users

Representa um usuário. Todas as informações e definições relativas ao usuário é armazenada nesta tabela

Campo Tipo Descrição
id int 64 Identificador mutável de registro de um usuário. No iDSecure, cada edição de usuário resulta em uma inserção na tabela Users, com um novo id.
inativo bool Indica se um usuário está inativado (Caso 0, está ativo e caso 1 está inativo).
Usuários inativos ainda são listados no iDSecure, porém não têm permissões de acesso.
contingency bool Indica se um usuários está em contingência (1 indica que está em contigência e 0 indica o contrário). Este valor só tem significado na versão Enterprise do iDSecure.
No modo de contingência, as informações do usuário são mantidas nos dispositivos, de modo que os usuários em contingência continuam tendo acesso liberado mesmo que o servidor ou a rede estejam desligados.
deleted bool Indica se um usuário está deletado (1 indica que está deletado e 0 indica o contrário).
Usuários deletados não são listados no iDSecure e são mantidos no banco apenas a fim de registrar o histórico de modificações em um usuário, por motivos de auditoria.
idDevice int Identificador único e imutável de um usuário. Este valor é persistido durante edições de um usuário e corresponde à informação "ID" do usuário, exibida na interface Web do iDSecure.
idType bool Indica o tipo de usuário:Pessoa ou Visitante. Se for 0 é pessoa e 1 é visitante.
idArea int Identificador da área atual do usuário (coluna id, da tabela Areas).
dataLastLog int Inteiro representando a data e hora (Unix timestamp) do último acesso feito pelo usuário.
timeOfRegistration int Inteiro representando a data e hora (Unix timestamp) do registro do usuário.

Atualização de usuários

Conforme a descrição do campo id da tabela Users, o comportamento do iDSecure ao atualizar um usuário consiste em marcar o registro antigo com a flag deleted = 1 e inserir um novo registro com um novo valor na coluna id e os valores atualizados do usuário. Isto é feito a fim de registro de histórico de alterações das informações de um usuário e não é obrigatório. É importante tomar o cuidado de não duplicar registros na tabela Users com o mesmo id.

Exemplo de modificação de um usuário (atualizando o registro já existente)

UPDATE Users SET name = "Walter H. White" WHERE id = 1000001;

Exemplo de modificação de um usuário (criando um novo registro e preservando o existente)

Este comportamento é similar ao que o iDSecure faz ao se editar um usuário.

INSERT INTO Users
SELECT MAX(_u.id) + 1, "Walter H. White", _u.registration, _u.pis, _u.senha, _u.barras, _u.cpf, _u.rg, _u.phone, _u.email, _u.emailAcesso, _u.hash, _u.salt, _u.admin, _u.inativo, _u.contingency, _u.deleted, _u.idDevice, _u.endereco, _u.bairro, _u.cidade, _u.cep, _u.cargo, _u.admissao, _u.telefone, _u.ramal, _u.pai, _u.mae, _u.nascimento, _u.sexo, _u.estadoCivil, _u.nacionalidade, _u.naturalidade, _u.idResponsavel, _u.responsavelNome, _u.veiculo_marca, _u.veiculo_modelo, _u.veiculo_cor, _u.veiculo_placa, _u.idType, _u.dateLimit, _u.visitorCompany, _u.blackList, _u.dateStartLimit, _u.pisAnterior, _u.comments, _u.allowParkingSpotCompany, _u.idArea, _u.dataLastLog, _u.timeOfRegistration
FROM Users _u 
WHERE id = 1000001;

UPDATE Users SET deleted = 1 WHERE id = 1000001;

AccessRules

Organização das Regras de Acesso

Uma regra de acesso é o conjunto de informações que determina se um certo usuário tem acesso a um local, em um certo horário. Além das informações de "Quem", "Quando" e "Onde", também é possível especificar algumas lógicas adicionais, como bloqueio de re-entrada, escolta, etc. A tabela de regras de acesso é a AccessRules e contém apenas as informações de "Como" um usuário pode ter acesso, correspondendo às lógicas adicionais mencionadas acima.

Os locais e horários são definidos em tabelas dedicadas para isso, Areas e Scheduls, respectivamente. O que associa áreas e horários a uma regra de acesso são tabelas relacionais, tais como a AreaAccessRules e a SchedulAccessRules. Abaixo, segue uma descrição das tabelas mencionadas:

Esta tabela contém as informações de Regras de Acesso.

Campo Tipo Descrição
id int 64 Identificador da regra de acesso.
name bool Indica se um usuário está inativado (Caso 0, está ativo e caso 1 está inativo).
Usuários inativos ainda são listados no iDSecure, porém não têm permissões de acesso.
idType string Tipo da regra, quanto ao controle de acesso de usuários ou veículos
(Pode conter os valores 'usuários' ou 'veículos')

Areas

Esta tabela contém as informações de Áreas.

Campo Tipo Descrição
id int 64 Identificador da área.
name string Nome da área.
externa bool Indica se a área é externa. A definição de área externa é importante para o uso de algumas funcionalidades relacionadas à saída de um usuário do local.
Por exemplo: baixa de cartões e expiração de Visitantes ao sair de uma empresa.
ade bool Indica se a área tem Anti-Dupla Entrada habilitada.
A Anti-Dupla Entrada (ADE) é um recurso utilizado em áreas com entrada e saída controladas, evitando que um usuário libere entrada para outro em catracas, por exemplo.

AreaAccessRules

Esta tabela contém as relações de Áreas com Regras de Acesso.

Campo Tipo Descrição
id int 64 Identificador da relação entre uma área e uma regra de acesso.
idAccessRule int Identificador da regra de acesso (coluna id, da tabela AccessRules).
idArea int Identificador da área (coluna id, da tabela Areas).

Scheduls

Esta tabela contém as informações de definições de Horários.

Campo Tipo Descrição
id int 64 Identificador da definição de horário.
name string Nome da definição de horário.
sundayStart int Horário de início da liberação / expediente, expresso em segundos desde as 0h.
sundayStart int Horário de fim da liberação / expediente, expresso em segundos desde as 0h.

* Os horário são armazenados em segundos desde às 0 horas do dia. Exemplo: Uma hora da manhã será 3600, já que 16060 = 3600. Duas horas da manhã será 7200, já que 26060 = 7200. * Como é de se esperar, existe um par de colunas xStart e xEnd para cada dia da semana, começando por Domingo (sunday) e indo até Sábado (saturday). * O nome desta tabela contém um erro de digitação e, por motivos de compatibilidade, seu nome não deve ser alterado.

SchedulAccessRules

Esta tabela contém as relações de definições de Horários com Regras de Acesso.

Campo Tipo Descrição
id int 64 Identificador da relação entre uma definição de horário e uma regra de acesso.
idAccessRule int Identificador da regra de acesso (coluna id, da tabela AccessRules).
idSchedul int Identificador da definição de horário (coluna id, da tabela Scheduls).

UserAccessRules

Esta tabela contém as relações de Pessoas e Visitantes com Regras de Acesso.

Campo Tipo Descrição
id int 64 Identificador da relação entre um usuário pertencente a uma regra de acesso.
idAccessRule int Identificador da regra de acesso (coluna id, da tabela AccessRules).
idUser int Identificador do usuário (coluna id, da tabela Users).
isEscort int Indica se o departamento ou grupo contém escoltadores, para uso com a funcionalidade de escolta
(Verificar o preenchimento das colunas EscortEnabled e EscortPeriod da tabela AccessRules).

Groups

Esta tabela contém as informações de definições de Departamentos, Grupos e Empresas.

Campo Tipo Descrição
id int 64 Identificador da relação entre um usuário pertencente a um departamento, grupo ou empresa.
idUser int Identificador da regra de acesso (coluna id, da tabela AccessRules).
disableADE bool Indica se as definições de Anti-Dupla Entrada estão desabilitadas para este departamento, grupo ou empresa.
idType int Tipo do registro, indicando se é um departamento, grupo ou empresa(Valores possíveis: 0=Departamento, 1=Grupo, 2=Empresa).

UserGroups

Esta tabela contém as relações de Pessoas e Visitantes com Departamentos, Grupos e Empresas.

Campo Tipo Descrição
id int 64 Identificador do departamento, grupo ou empresa.
idUser int Nome da do departamento, grupo ou empresa.
idGroup int Identificador do departamento, grupo ou empresa (coluna id, da tabela Groups).
isVisitor bool Indica se o grupo é um grupo de visitantes.

GroupAccessRules

Esta tabela contém as relações de Departamentos, Grupos e Empresas com Regras de Acesso.

Campo Tipo Descrição
id int 64 Identificador da relação entre um departamento, grupo ou empresa pertencente a uma regra de acesso.
idAccessRule int Identificador do usuário (coluna id, da tabela Users).
idGroup int Identificador do departamento, grupo ou empresa (coluna id, da tabela Groups).
isEscort bool Indica se o departamento ou grupo contém escoltadores, para uso com a funcionalidade de escolta.

Exemplo de associação de um usuário a uma regra de acesso, por ID do usuário

Insere o usuário de ID número 1000001 na regra de acesso de ID 1 (regra "Sempre Liberado", por padrão).

INSERT INTO UserAccessRules (idAccessRule, idUser) VALUES (1, 1000001);

Exemplo de associação de um usuário a um departamento, grupo ou empresa

Insere o usuário de ID número 1000001 no grupo de ID 1 ("Departamento Padrão", por padrão).

INSERT INTO Groups (idGroup, idUser) VALUES (1, 1000001);

É possível criar departamentos e regras de acesso utilizando a própria interface de usuário do iDSecure, configurando-as conforme for necessário, e apenas inserir os usuários nos departamentos adequados.

Logs

Todos os registros de acessos dos usuários são armezanados na tabela Logs do banco de dados do iDSecure.

Campo Tipo Descrição
id int 64 Identificador do log de acesso.
idDevice int Identificador do dispositivo em que houve o acesso (coluna id, da tabela Devices).
deviceName string Nome do dispositivo em que houve o acesso (coluna name da tabela, Devices)
time int Inteiro representando a data e hora (Unix timestamp) do acesso
event int Tipo do evento de acesso. Os eventos de acesso são:
0=Erro;
1=Equipamento inválido;
2=Parâmetros de regra de identificação inválidos;
3=Não identificado;
4=Identificação pendente;
5=Timeout na identificação;6=Acesso negado;7=Acesso autorizado;
8=Acesso pendente;
11=Abertura por botoeira;
12=Abertura por interface Web (ou comando "Abrir porta");
13= Desistência;
idArea int Identificador da área acessada (coluna id da tabela Areas).
area string Nome da área acessada (coluna name da tabela Areas).
reader string Leitora através da qual o acesso foi realizado.
idUser int Identificador do usuário que realizou o acesso (coluna id da tabela Users).

Exemplo de consulta dos últimos 10 acessos autorizados de um usuário

SELECT u.id, u.name, l.idDevice, l.deviceName, l.reader, l.idArea, l.area, l.event, l.time
FROM Logs l
INNER JOIN Users u ON l.idUser = u.id
WHERE l.idUser = 1000001 AND l.event = 7
ORDER BY time DESC
LIMIT 10;

Cards

Esta tabela contém informações dos cartões cadastrados.

Campo Tipo Descrição
id int 64 Identificador do cartão.
idUser int ID do usuário a quem pertence o cartão. Corresponde ao campo "id" da tabela Users.
number int Código do cartão em formato numérico. Em caso de cartões no formato "área,código" e hexadecimal, este valor é convertido para formato numérico e armazenado neste campo.
idType int Inteiro representando se a tag está destinado a uma pessoa ou veículo, caso tenha o valor 1 = pessoa, caso tenha o valor 2 = veículo
type int Tecnologia do cartão: "0" para ASK/125kHz, "1" para Mifare e "2" para QR-Code.
numberStr string Código do cartão no formato String.
Útil para cartões cujo código contém caracteres hexadecimais ou área e código.

Devices

Esta tabela contém informações dos dispositivos cadastrados.

Campo Tipo Descrição
id int 64 Identificador do dispositivo.
name string Nome de definição do dispositivo.
host int String contendo o host do dispositivo.
port int Inteiro representando a porta em que o dispositivo esta escutando.
serial string String contendo a serial do dispositivo.
versão string String contendo a versão do software.