Criando Um Controle de Acesso No Lazarus

download Criando Um Controle de Acesso No Lazarus

of 12

Transcript of Criando Um Controle de Acesso No Lazarus

Criando um controle de acesso no Lazarus - Parte 1

Criando um controle de acesso no Lazarus - Parte 1

Nesta srie de artigos que iniciarei hoje, vou apresentar aos colegas como que venho implementando o controle de acesso em meus aplicativos. um modelo simples, que venho "aperfeioando" desde que comecei a programar e adaptando sempre nova realidade que vem se apresentando. No a ltima palavra em programao, mas acredito que pode ser um bom comeo para quem deseja implementar alguma coisa partindo do zero.

O modelo que apresento ir abordar algumas funcionalidades que utilizo em meus programas, sendo algumas usadas h muito tempo, outras nem tanto. So elas:

Menu Dinmico, armazenado no banco de dados e criado em tempo de execuo;

Cadastro de telas (aplicaes), usurios e permisses no prprio aplicativo;

Barra de ferramentas com os cones das aplicaes permitidas, configuradas pelo usurio;

Interface TDI (Tabbed Document Interface). Esta foi implementada recentemente e acredito que precisa de algumas melhorias;

Antes de tudo devo esclarecer que utilizo dois ambientes distintos. Um no trabalho e outro em casa. No trabalho utilizo Delphi ou Lazarus, dependendo do caso, em ambiente Windows XP e 2003 Server, com os bancos de Dados SQL Server 2005 e Firebird 2.1.

Em casa utilizo Linux Ubuntu 10.10, Lazarus 0.9.31 (SVN) e Banco de Dados Firebird 2.5 e este ser o ambiente utilizado ao longo destes artigos.

Em todo caso, o modelo j foi usado nos dois ambientes sem nenhum problema, precisando apenas de algumas adaptaes. Portanto, vamos logo s ferramentas necessrias:

1. Lazarus 0.9.31 (SVN): No vou entrar em detalhes de instalao do Lazarus porqu j abordaram o assunto com muito mais competncia do que eu. Portanto se voc no tem o seu Lazarus instalado, leia o excelente post de meu amigo Slvio Clcio no artigo Instalando o Lazarus no Lucid ou Maverick pelo SVN.

2. Firebird 2.5: Caso voc no tenha o seu Firebird instalado, em meu ltimo post eu mostrei como instalar a verso "stable" do mesmo. O post pode ser visto em Instalando o Firebird 2.5 Final no Ubuntu Maverick.

3. ZeosLib 7.0: Componente de acesso a diversos bancos de dados, entre eles: Firebird, PostgreSQL, SQL Server, MySQL, SQLite e outros. Um bom tutorial sobre sua instalao e configurao pode ser encontrado (mais uma vez) no site do amigo Slvio Clcio. O ttulo do artigo Tutorial Zeos Especial. Nele voc encontra vrias informaes sobre o Zeos, um link para download do tutorial do Professor Carlos Amaral e muitas outras coisas.

4. Flamerobin: O Flamerobin, para quem no conhece, uma ferramenta open source para administrao de bancos de dados Firebird em ambiente Linux, disponvel nos repositrios do Ubuntu. Voc pode instal-la atravs do synaptic, central de programas do Ubuntu, ou mesmo atravs do apt-get. Nesta ltima opo, basta entrar no terminal e digitar:

sudo apt-get install flamerobin

Para esta srie de artigos, vou criar um novo banco de dados, que darei o nome ACESSO.FDB, para que os colegas possam acompanhar todo o processo de criao. Vamos aos passos para cri-lo:

1) Abra o FlameRobin, atravs do menu Aplicativos - Desenvolvimento - Flamerobin. Aparecer a tela principal do programa, como abaixo:

2) Clique no Server "Localhost" com o boto direito do mouse e selecione a opo Create new Database. Ser aberta a tela de criao de um novo banco de dados como abaixo:

3) Preencha as informaes conforme a tela abaixo. Altere apenas o campo "Database path" para o caminho onde voc armazenar o seu banco de dados. No meu caso eu utilizei o /media/Projetos/Database/ACESSO.FDB, porqu meus arquivos de trabalho ficam em um outro HD.

4) Feito isto, basta criar no boto "Create" e seu novo banco de dados estar criado, como voc ver nas imagens abaixo:

No prximo artigo veremos como criar as tabelas que formaro a nossa estrutura de acesso. Desculpem-me por dividir o artigo em vrias partes, mas isto necessrio devido a grande quantidade de informaes, o que poderia confundir usurios iniciantes.

Caso tenha alguma dvida, por favor poste nos comentrios que terei o maior prazer em responder.

Um abrao a todos e at a prxima.

Criando um controle de acesso no Lazarus - Parte 2

Nesta segunda parte do artigo vamos criar nossa estrutura de dados e partir para a programao de nosso modelo. Como vocs devem ter percebido em nosso primeiro artigo, fizemos uma abordagem mais detalhada do Flamerobin. Sei que muitos podem ter achado o assunto enfadonho, principalmente aqueles que j dominam bem a ferramenta, mas achei necessrio por se tratar de uma ferramenta no muito conhecida. Eu mesmo usava o IBExpert at h alguns dias atrs e no domino muito bem o Flamerobin. Mas quem preferir continuar usando o IBExpert, informo que ele pode ser instalado no Linux e roda perfeitamente via wine.

Para no deixar o assunto flamerobin incompleto, vou mostrar apenas como criar a primeira tabela. No modelo proposto utilizaremos cinco tabelas:

USUARIOS - Armazenar as informaes de login dos usurios.

APLICACOES - Armazenar as aplicaes que faro parte do Aplicativo e as configuraes para exibio no menu e na barra de ferramentas.

PERMISSOES - Armazenar o relacionamento entre os usurios e as telas s quais os mesmos tero acesso.

FAVORITOS - Armazenar as preferncias do usurio no que se refere aos cones que sero exibidos na barra de ferramentas.

TABELAS - Armazenar o relacionamento entre as aplicaes e as tabelas no banco de dados s quais o usurio dever ter acesso para execut-las

Vou mostrar (para os iniciantes, claro) apenas como criar a tabela de usurios e as outras ficam por conta de cada um. Ento vamos l:

1) Abra o Flamerobin e expanda a lista do localhost. Ir aparecer os seus bancos de dados como na figura abaixo:

2) D um duplo click sobre o database Acesso para expandir os objetos dele, como abaixo:

3) Clique com o boto direito sobre o objeto Tables e escolha a opo "create new...". Ser aberta uma nova janela com um template da instruo SQL para criao de uma nova tabela:

4) A partir da, s substituir os nomes da tabela e dos campos que iremos criar, de acordo com a nossa necessidade:

5) Depois que as definies da tabela estiverem digitadas, iremos executar a instruo no Banco. Isto feito atravs do boto Execute Statement, ou pressionando a tecla F4. E finalmente, para as informaes ficarem gravadas no banco, precisaremos fazer o commit, clicando no boto Ok:

6) Aps estes procedimentos voc ver a nova tabela na rvore de objetos do banco, como mostrado abaixo:

Agora s criar as demais tabelas, de acordo com o script que vou passar agora.

CREATE TABLE APLICACOES( ID_APLICACAO INTEGER NOT NULL, NOME VARCHAR(20) NOT NULL, TITULO VARCHAR(40), DESCRICAO VARCHAR(160), CLASSE VARCHAR(20) NOT NULL, ICONE INTEGER NOT NULL,

NIVEL INTEGER NOT NULL, POSICAO CHAR(9) NOT NULL, BARRA SMALLINT DEFAULT 0,

CONSTRAINT APLICACOES_PKEY PRIMARY KEY (ID_APLICACAO);

CREATE TABLE PERMISSOES( ID_USUARIO INTEGER NOT NULL, ID_APLICACAO INTEGER NOT NULL, CONSTRAINT PERMISSOES_PKEY PRIMARY KEY (ID_USUARIO,ID_APLICACAO));ALTER TABLE PERMISSOES ADD CONSTRAINT PERMISSOES_ID_APLICACAO_FKEY FOREIGN KEY (ID_APLICACAO) REFERENCES APLICACOES (ID_APLICACAO);ALTER TABLE PERMISSOES ADD CONSTRAINT PERMISSOES_ID_USUARIO_FKEY FOREIGN KEY (ID_USUARIO) REFERENCES USUARIOS (ID_USUARIO);

CREATE TABLE FAVORITOS( ID_USUARIO INTEGER NOT NULL, ID_APLICACAO INTEGER NOT NULL, CONSTRAINT FAVORITOS_PKEY PRIMARY KEY (ID_USUARIO,ID_APLICACAO));ALTER TABLE FAVORITOS ADD CONSTRAINT FAVORITOS_ID_APLICACAO_FKEY FOREIGN KEY (ID_APLICACAO) REFERENCES APLICACOES (ID_APLICACAO);ALTER TABLE FAVORITOS ADD CONSTRAINT FAVORITOS_ID_USUARIO_FKEY FOREIGN KEY (ID_USUARIO) REFERENCES USUARIOS (ID_USUARIO);

CREATE TABLE TABELAS( ID_APLICACAO INTEGER NOT NULL,

TABELA VARCHAR(20) NOT NULL, CONSTRAINT TABELAS_PKEY PRIMARY KEY (ID_APLICACAO));ALTER TABLE TABELAS ADD CONSTRAINT TABELA_ID_APLICACAO_FKEY FOREIGN KEY (ID_APLICACAO) REFERENCES APLICACOES (ID_APLICACAO);

Para que o leitor possa acompanhar melhor o meu raciocnio, vou explicar a funo de cada campo da Tabela APLICACOES. As demais tabelas, acredito eu, se auto explicam, mas caso haja alguma dvida a respeito delas, fiquem vontade para express-las nos comentrios:

O campo NOME, se refere ao nome que iremos dar ao objeto TMenuItem que ser criado dinamicamente na apresentao do menu. ele deve ser nico e no dever ter caracteres especiais para no causar erro de execuo na montagem do menu.

O campo TITULO, armazenar... o ttulo do menu (R!). Exatamente! O ttulo que ser mostrado no menu.

O campo DESCRICAO, conter a informao que ser apresentada no hint do objeto quando o mouse passar sobre a opo do menu.

O campo CLASSE armazenar o nome da classe TForm que ser instanciada quando o usurio clicar na opo do menu. Exemplo: TFrmClientes

O campo ICONE armazenar a posio do cone do menu dentro do objeto TImageList. Com certeza h outras formas de armazenar imagens... alguns optam por coloc-las no banco, outros preferem colocar em uma pasta. Neste caso especfico, optei por colocar todas as imagens em um objeto TImageList, mas isso vai do gosto de cada um...

O campo NIVEL armazenar a estrutura de submenus do objeto TMainMenu, podendo ser de 0 a 9. Eu particularmente, s utilizei at o nvel 5. A partir deste nmero, no sei se ficaria com um visual muito legal.

O campo POSICAO armazenar as informaes a respeito do posicionamento de cada opo do menu dentro do objeto TMainMenu.

O campo BARRA informa se a opo ser ou no mostrada na barra de ferramentas (0 = no, 1 = sim). Logicamente, estas informaes sero sobrepostas pelas preferncias do usurio, cadastradas na tabela FAVORITOS.

No prximo artigo, vamos partir para a programao do modelo. Ento preparem seus Lazarus e at a prxima.

Criando um controle de acesso no Lazarus - Parte 3

Aps tanto tempo sem postar nada e, depois de uma poro de cobrana por parte de alguns de meus leitores, resolvi dar continuidade a esta srie de artigos interrompida h mais de um ano.

Devo dizer que durante este tempo, muita coisa mudou e, em meu dia a dia, houveram algumas mudanas que iro afetar a forma como passarei a apresentar meus artigos daqui para frente. Sobretudo no que se refere a este artigo, especialmente.

A primeira coisa que mudou foi minha distribuio Linux. Quando iniciei esta srie estava utilizando o Ubuntu 10.10 e como o Lazarus estava se mostrando muito instvel com esta distro,comecei a testar outros ambientes at que finalmente encontrei aquela com a qual me identifiquei completamente: Linux Mint (Estou usando a verso 14). Caso algum dos meus leitores tenham interesse em conhec-la, a mesma encontra-se disponvel em http://www.linuxmint.com.

Outra coisa que mudou foi o meu cliente de banco de dados. No por nenhum demrito do FlameRobin, mas por uma questo de praticidade mesmo. Naquela poca eu utilizava o FlameRobin e o IBExpert (Windows) para acessar Firebird, SQL Managment Studio para acessar o MS SQL Server, SQLite Studio para bases SQLite, PGAdmin3 para o PostgreSQL era muito cliente pra pouco banco. Resolvi o problema quando encontrei uma ferramenta que para mim perfeita. Trata-se do SquirrelSQL (http://www.squirrelsql.org), um cliente multibancos e multiplataforma que me permite acessar mais de vinte bancos de dados diferentes, e com uma poro de recursos que facilitaram muito a minha vida. Em meu prximo artigo farei uma apresentao mais detalhada desta maravilhosa ferramenta.

Ainda sobre bancos de dados, achei mais adequado adotar para exemplos de meus artigos o banco de dados SQLite, pois nem todo mundo tem a pacincia necessria para instalar e configurar um Firebird ou outro banco de dados mais parrudo. Sem falar que, pelo pequeno tamanho dos arquivos, fica mais fcil para disponibilizar uma cpia dos bancos juntamente com os programas fontes de meus artigos em meu repositrio SVN(https://subversion.assembla.com/svn/smalltips/), onde aqueles que estiverem com preguia sem tempo para digitar os cdigos podero baixar e estud-los com mais calma. Devo adiantar que os fontes deste artigo j esto disponveis no SVN para quem quiser baixar. No est completo ainda, mas j d para os mais apressados pegarem como modelo para implementar alguma coisa prtica.

E finalmente, tambm mudar a forma como os artigos sero publicados. Nos prximos artigos no teremos mais parte 1, 2, 3, 1000 Este ser meu ltimo artigo seccionado. Se o artigo no for pequeno suficiente para caber em um nico post, o mesmo ser disponibilizado em formato PDF para ser baixado do SVN. E a partir de hoje, todos os novos artigos que se referirem a programao Lazarus, tero os programas de exemplos no SVN. Com isso espero atender melhor a meus leitores e evitar desgastes provocados pela demora entre as postagens de artigos muito longos.

Terminadas as explicaes, vamos ao que de fato interessa, que a implementao do controle de acesso. Para quem est chegando agora, aconselho a dar uma lida na Parte 1 e na Parte 2 deste artigo, onde apresentamos a montagem da estrutura de dados. Como j havia falado, troquei a base de dados para SQLite e tambm dei uma enxugada na mesma para que o assunto ficasse focado apenas no controle de acesso bsico. Ento queles que esto acompanhando desde a primeira parte, fica o conselho de dar uma olhada nas tabelas do banco acesso.db3, do SVN. Para o assunto no ficar muito extenso, tanto o banco de dados quanto os programas fontes esto disponveis no SVN e podem ser baixados no link abaixo:

https://subversion.assembla.com/svn/smalltips/Para quem utiliza Linux, sugiro a instalao do programa SVN Workbench. J no caso do Windows, o Tortoise SVN para mim a melhor opo. Mas isso fica a critrio de cada um. Estando de posse do cdigo fonte, passarei a explicar os porqus de cada instruo. Mas isso ficar para a parte 4, que espero ser a ltima, e dever estar publicada no mximo, at domingo. At l, divirtam-se estudando os cdigos e fiquem vontade para fazer quaisquer comentrios ou sugestes.

Um abrao a todos e at a parte 4.