Mão na Massa
Controle de Acesso
Realizando o controle de acesso de usuários e grupos da aplicação através de menu dinâmico
Everson Volaco
Neste artigo veremos como realizar o controle de acesso em uma aplicação Delphi, utilizando menu dinâmico. A idéia é definir os privilégios de acesso dos usuários e grupos do sistema no banco de dados e habilitar as opções do menu principal (MainMenu) e dos botões das telas de cadastro, de acordo com esses privilégios.
Nota: Para o exemplo deste artigo utilizei o Delphi 7 com o InterBase 7.5.1, porém você pode utilizar qualquer outra versão do Delphi e do InterBase ou Firebird.
Exemplo
Para o exemplo deste artigo criaremos uma aplicação VCL (Win32) contendo inúmeras opções de menu e telas de cadastro e movimentação. Para não sair do foco do assunto deste artigo, controle de acesso, não implementaremos todas as telas desse sistema, porém as funcionalidades que serão necessárias para fazer o controle de acesso dos usuários e grupos, serão mostradas.
Serão utilizados os privilégios de Consulta, Inserção, Alteração e Exclusão, os quais poderão ser definidos tanto para um grupo quanto para um usuário do sistema. Um usuário poderá pertencer a mais de um grupo, onde, caso o mesmo possua privilégios de acesso diferentes em cada grupo, os privilégios serão concatenados.
Por exemplo, se definirmos que o usuário Everson pertence aos grupos Desenvolvedores e Analistas e no grupo Desenvolvedores o mesmo tenha apenas permissão de Inserção na tela de clientes, porém, no grupo Analistas tenha permissões de Alteração e Exclusão, então o Everson será capaz de Inserir, Alterar e Excluir os clientes.
O controle de acesso poderá ser definido ainda ao nível de usuário sem a necessidade de vinculá-lo a um ou mais grupos. No entanto, caso existam permissões de acesso definidas diretamente no usuário e esse pertença a um grupo que também possui permissões definidas, as mesmas serão concatenadas da mesma forma que ocorre entre os grupos.
Nota: Por questões de espaço, mostraremos neste artigo apenas os códigos relacionados ao controle de acesso da aplicação. Você pode ter acesso ao código-fonte completo do exemplo através do link para download.
Definindo o banco de dados
Começaremos o exemplo, definindo as tabelas que serão responsáveis em armazenar as informações referentes ao controle de acesso do sistema. Abra a sua ferramenta de gerenciamento de banco de dados InterBase ou Firebird, como por exemplo o IBConsole ou IBExpert e crie um banco de dados com o nome de “ACESSO.IB”. Criaremos seis tabelas no banco de dados, cuja descrição das mesmas consta na Tabela 1.
Nome da Tabela |
Descrição |
MENUS |
Tabela contendo todas as opções disponíveis no menu principal da aplicação. |
GRUPOS |
Tabela contendo todos os grupos cadastrados no sistema. |
USUARIOS |
Tabela com todos os usuários do sistema. |
GRUPOS_USUARIOS |
Tabela de vínculo entre os usuários e grupos do sistema. |
PERMISSOES_GRUPOS |
Tabela contendo as permissões de acesso de cada item de menu e tela para os grupos do sistema. |
PERMISSOES_USUARIOS |
Tabela contendo as permissões de acesso de cada item de menu e tela para os usuários do sistema. |
Tabela 1. Descrição das tabelas do banco
Na Listagem 1 temos as instruções DDL para a criação das tabelas.
Listagem 1. Código para criação das tabelas
CREATE TABLE MENUS (
MEN_CODIGO INTEGER NOT NULL,
MEN_NOME VARCHAR(25) NOT NULL,
MEN_CODIGOPAI INTEGER,
MEN_EXISTE BOOLEAN NOT NULL,
CONSTRAINT PK_MENUS PRIMARY KEY (MEN_CODIGO),
CONSTRAINT FK_MENUS FOREIGN KEY (MEN_CODIGOPAI)
REFERENCES MENUS(MEN_CODIGO)
" [...] continue lendo...