Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

  1. 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.

  2. 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.

  3. 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:

salvar.gif

Exemplo prático de desativação dos painéis para um usuário utilizando a funcionalidade via tela:

desativar.gif

Exemplo de limpeza total da listagem via tela ( Não confundir com ativação/desativação das funcionalidades ):

limparlista.gif

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:

  1. Select (S) = 1 (permitido);
  2. Insert (I) = 0 (não permitido);
  3. Update (U) = 0 (não permitido);
  4. Delete (D) = 0 (não permitido);
  5. 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:

image.png

actionpermission.png

Botões de ações na tela do CRUD

field_action_1.27f10a09.gif

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:

ocultar-eventos-dinamicos-gif.gif