Controle de Acesso
[!WARNING] OBS: a tabela CONTROLE_ACESSO deverá ser excluida e utilizar a tabela SIMOVAAPPS para realizar as configurações. Para remover o menu CONTROLE_ACESSO colocar o _ignore* na tabela _nfs_core_menu* não funciona. A solução para a tabela CHAVE_ACESSO é excluir a tabela, pois agora será utilizada a tabela SIMOVAAPPS para fazer as configurações, logo pode ser removida a tabela CHAVE_ACESSO, pois já existe a validação no core que não exibirá esse menu quando não houver a tabela.
O menu controle de acesso está disponível para os usuários que possuem:
- TIPO_SEQ_DB 2 (ADMIN) ou TIPO_SEQ_DB 100 (USERADMIN);
- O módulo de controle de acesso liberado para o seu usuário ou ao grupo que ele pertence.
Grupo
O cadastro de grupos tem como finalidade conceder acesso ao sistema quando vinculado a usuários específicos. Essa funcionalidade é gerenciada pela tabela nfs_acl_grupo. A visibilidade do grupo está condicionada à configuração da coluna RESTRICTED. Se o valor desta coluna for definido como 1, o grupo será exibido apenas quando o usuário logado possuir o TIPO_USUARIO_SEQ_DB 2 ou 3.
Essa abordagem oferece um controle mais refinado sobre a visibilidade dos grupos, restringindo a exposição a usuários com permissões específicas. Portanto, ao configurar o valor da coluna RESTRICTED, é possível modular a visibilidade do grupo, adaptando-a de acordo com as necessidades específicas do seu controle de acesso no sistema.
Usuario
O módulo de usuário é responsável por facilitar a criação e gestão de contas de usuários, fornecendo acesso ao sistema. Este módulo opera principalmente através das tabelas nfs_acl_usuario, nfs_acl_usuario_empresa e nfs_acl_grupo_usuario.
Funcionalidades Principais
-
nfs_acl_usuario: contém informações vitais sobre os usuários, incluindo dados como nome, senha e configurações específicas da conta do usuário.
-
nfs_acl_usuario_empresa: armazena dados relacionados à empresa do usuário, estabelecendo uma conexão detalhada entre o usuário e a respectiva entidade à qual está associado.
-
nfs_acl_grupo_usuario: relaciona os usuários ao respectivos grupos.
Lógica de Exibição
Ao realizar login, o sistema verifica o tipo de usuário ativo. Se o tipo de usuário for classificado como TIPO_USUARIO_SEQ_DB 2 ou 3, a lógica de exibição especial é acionada:
- Grupos com a restrição RESTRICTED 1 serão listados;
- Todos os tipos de usuários cadastrados serão apresentados, oferecendo uma visão completa das contas de usuário disponíveis no sistema.
Acesso de Rotas
Permite liberar as funcionalidades do sistema para usuários e grupos. O cadastro utiliza as tabelas nfs_acl_grupo_permissao_rota (permissão para o grupo) e nfs_acl_usuario_permissao_rota (permissão para o usuário), e:
- Os módulos são listados da tabela nfs_system_modules;
- Os módulos devem ser vinculados com o host na tabela nfs_hosts_n_system_modules.
[!IMPORTANT] Se o usuário logado possuir o TIPO_USUARIO_SEQ_DB 2 ou 3 serão listados os grupos com RESTRICTED 1 e todos os tipos de usuários cadastrados.
Exemplo de permissão via banco para todos os painéis em todos EFL
INSERT INTO `nfs_acl_grupo_permissao_rota` (`EMPRESA`, `FILIAL`, `LOCAL`, `TIPO`, `ROTA`, `GRUPO_SEQ_DB`, `INS_DH`, `ATIVO`, `DELETED`)
SELECT distinct 9999, 9999, 9999, 'ALLOW', '/panel/*', g.SEQ_DB, CURRENT_TIMESTAMP(), 1, 0
from nfs_acl_grupo g
where g.ATIVO = 1;
Exemplos de configuração do campo ROTA do comando acima:
- Permissão para todos os calendários: /calendar/*
- Permissão para o calendário com seq_db 1: /calendar/1
- Permissão para todas as funcionalidades do cadastro de assinatura: /t/apontamento_assinatura/*
- Permissão apenas para a listagem do cadastro de dtac: /t/apontamento_dtac/list
- Permissão apenas para a inserção do cadastro de dtac: /t/apontamento_dtac/insert
- Permissão apenas para a edição do cadastro de dtac: /t/apontamento_dtac/edit/*
- Permissão para todos os cadastros: /t/*
- Permissão para todos os relatórios: /reports/*
- Permissão para todos os painéis: /panel/*
Exemplo prático de ativação dos painéis para um usuário utilizando a funcionalidade via tela:
Exemplo prático de desativação dos painéis para um usuário utilizando a funcionalidade via tela:
Exemplo de limpeza total da listagem via tela ( Não confundir com ativação/desativação das funcionalidades ):
Controle de Campos
Este cadastro deve ser utilizado quando é necessário esconder um campo do cadastro e da tela de detalhes. O cadastro utiliza as tabelas nfs_acl_grupo_permissao_campo (controle para o grupo) e nfs_acl_usuario_permissao_campo (controle para o usuário).
[!IMPORTANT] Se o usuário logado possuir o TIPO_USUARIO_SEQ_DB 2 ou 3 serão listados os grupos com RESTRICTED 1 e todos os tipos de usuários cadastrados.
Exibir Campos de SIUDT (Select/Insert/Update/Delete/Toggle)
Para determinar se os botões de Select (S), Insert (I), Update (U), Delete (D) e Toggle (T) devem ser exibidos, é necessário configurar as permissões nas tabelas nfs_acl_grupo_permissao e nfs_acl_usuario_permissao. As permissões podem ser configuradas tanto para grupos quanto para usuários.
Configuração por Grupo
A tabela nfs_acl_grupo_permissao é usada para definir permissões para um grupo de usuários. Vamos analisar um exemplo de configuração para o cadastro de EQUIPE:
INSERT INTO nfs_acl_grupo_permissao (
SEQ_DB, EMPRESA, FILIAL, `LOCAL`, MENU_SEQ_DB, TABELA_NOME, SIUDT, GRUPO_SEQ_DB, CAMPOS_PERMITIDOS, INS_DH, ATIVO, DELETED
) VALUES (
91, 1, 9999, 9999, NULL, 'EQUIPE', '10000', 6, '', '2020-06-15 09:59:52', 1, 0
);
Coluna SIUDT
Permissões de Select, Insert, Update, Delete e Toggle representadas como uma string de 5 caracteres, onde cada caractere pode ser 1 (permitido) ou 0 (não permitido).
- O primeiro caractere representa a permissão de Select;
- O segundo caractere representa a permissão de Insert;
- O terceiro caractere representa a permissão de Update;
- O quarto caractere representa a permissão de Delete;
- O quinto caractere representa a permissão de Desativar o Registro.
Exemplo de Configuração
A configuração '10000' na coluna SIUDT indica que o grupo tem permissão para Select apenas. Ou seja:
- Select (S) = 1 (permitido);
- Insert (I) = 0 (não permitido);
- Update (U) = 0 (não permitido);
- Delete (D) = 0 (não permitido);
- Toggle (T) = 0 (não permitido)
A lógica para exibir os botões de ação (S, I, U, D, T) depende dos valores configurados na coluna SIUDT. Se o valor correspondente for 1, o botão será exibido; caso contrário, ele não será exibido.
Exemplo de configuração via tela:
Botões de ações na tela do CRUD
Para adicionar um controle de acesso em um botão de ação depois de cria-lo (veja aqui como criar um botão de ação) basta selecionar a tabela a qual foi criada e escolher, pode ser por grupo ou usuário.
Controle de Acesso Field Action
Para controlar o acesso a esses campos foram criadas as tabelas nfs_acl_usuario_permissao_field_action e nfs_acl_grupo_permissao_field_action.
Estrutura da tabela de Usuário Permissão
CREATE TABLE `nfs_acl_usuario_permissao_field_action` (
`SEQ_DB` bigint(20) NOT NULL AUTO_INCREMENT,
`EMPRESA` bigint(20) NOT NULL DEFAULT '0',
`FILIAL` bigint(20) NOT NULL DEFAULT '0',
`LOCAL` bigint(20) NOT NULL DEFAULT '0',
`TIPO` enum('ALLOW','DENY') DEFAULT NULL,
`FIELD_ACTION_SEQ_DB` bigint(20) NOT NULL COMMENT 'Ação definida na tabela NFS_CORE_DS_FIELD_ACTION.',
`INS_USUARIO_SEQ_DB` bigint(20) NOT NULL,
`INS_DH` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`ATIVO` int(11) DEFAULT '1',
`DELETED` int(11) DEFAULT '0',
PRIMARY KEY (`SEQ_DB`),
KEY `EMPRESA` (`EMPRESA`),
KEY `FILIAL` (`FILIAL`),
KEY `LOCAL` (`LOCAL`),
KEY `FK_DS_FIELD_USUARIO_ACTION` (`FIELD_ACTION_SEQ_DB`),
KEY `FK_USUARIO_ACTION` (`INS_USUARIO_SEQ_DB`),
CONSTRAINT `FK_DS_FIELD_USUARIO_ACTION` FOREIGN KEY (`FIELD_ACTION_SEQ_DB`) REFERENCES `nfs_core_ds_field_action` (`SEQ_DB`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `FK_USUARIO_ACTION` FOREIGN KEY (`INS_USUARIO_SEQ_DB`) REFERENCES `nfs_acl_usuario` (`SEQ_DB`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
Estrutura da tabela Grupo Permissão
CREATE TABLE `nfs_acl_grupo_permissao_field_action` (
`SEQ_DB` bigint(20) NOT NULL AUTO_INCREMENT,
`EMPRESA` bigint(20) NOT NULL DEFAULT '0',
`FILIAL` bigint(20) NOT NULL DEFAULT '0',
`LOCAL` bigint(20) NOT NULL DEFAULT '0',
`TIPO` enum('ALLOW','DENY') DEFAULT NULL,
`FIELD_ACTION_SEQ_DB` bigint(20) NOT NULL COMMENT 'Ação definida na tabela NFS_CORE_DS_FIELD_ACTION.',
`GRUPO_SEQ_DB` bigint(20) NOT NULL,
`INS_DH` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`ATIVO` int(11) DEFAULT '1',
`DELETED` int(11) DEFAULT '0',
PRIMARY KEY (`SEQ_DB`),
KEY `EMPRESA` (`EMPRESA`),
KEY `FILIAL` (`FILIAL`),
KEY `LOCAL` (`LOCAL`),
KEY `FK_DS_FIELD_ACTION` (`FIELD_ACTION_SEQ_DB`),
KEY `FK_GRUPO_ACTION` (`GRUPO_SEQ_DB`),
CONSTRAINT `FK_DS_FIELD_ACTION` FOREIGN KEY (`FIELD_ACTION_SEQ_DB`) REFERENCES `nfs_core_ds_field_action` (`SEQ_DB`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `FK_GRUPO_ACTION` FOREIGN KEY (`GRUPO_SEQ_DB`) REFERENCES `nfs_acl_grupo` (`SEQ_DB`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
Quando for para dar permissão para um grupo ou usuário em um campo que vá em um CRUD é possível fazer isso pela de Tela de controle de Acesso por Campos.
Exemplo Acesso para o Grupo de SEQ_DB 2
INSERT INTO nfs_acl_grupo_permissao_field_action (`EMPRESA`, `FILIAL`, `LOCAL`, `TIPO`, `FIELD_ACTION_SEQ_DB`, `GRUPO_SEQ_DB`, `INS_DH`, `ATIVO`, `DELETED`) VALUES(4, 1, 1, 'ALLOW', 3, 2, '2019-07-30 18:44:26.000', 1, 0);
Ocultar Eventos Dinâmicos
Esta funcionalidade permite ocultar a visualização de eventos dinâmicos na aplicação. As funcionalidades são configuradas na tabela "nfs_acl_ocultar_eventos_dinamicos_funcionalidades". As permissões de visualização são controladas nas tabelas "nfs_acl_usuario_ocultar_eventos_dinamicos" e "nfs_acl_grupo_ocultar_eventos_dinamicos". A princípio, apenas a funcionalidade de indicadores da home está disponível para esse controle.
Como configurar a funcionalidade no banco
Primeiro configurar a tabela de funcionalidade:
INSERT INTO nfs_acl_ocultar_eventos_dinamicos_funcionalidades (NOME, INS_DH)
VALUES('INDICADORES (HOME)', '2020-06-15 00:00:00');
Após a configuração da funcionalidade de indicadores da home inserida no banco, podemos então utilizar a tela de acl ou configurar via banco, ex:
via Banco de dados para grupo de usuário:
INSERT INTO nfs_acl_grupo_ocultar_eventos_dinamicos (`EMPRESA`, `FILIAL`, `LOCAL`, `GRUPO_SEQ_DB`,
`FUNCIONALIDADE_SEQ_DB`, `INS_DH`, `ATIVO`, `DELETED`) VALUES(1, 1, 1, 1, 1, '2019-07-30 00:00:00.000', 1, 0);
via Tela do ACL: