Controle de Acesso a Usuários em Aplicação Comercial
Boa Noite(Dia/Tarde).
Bom, estou desenvolvendo determinado projeto, e no decorrer da elaboração do mesmo surgiram algumas dúvidas relacionadas aos processos que podem ser utilizados para efetuar o Controle de Acesso dos usuários da aplicação.Após extensiva pesquisa pela internet e seus forúns pude perceber que aparentemente não existe nenhum consenso sobre alguma metodologia que pode ser utilizada para a implementação deste feature no software. Na realidade acabei ficando com ainda mais dúvidas sobre como trabalhar a idéia.
Bom, vamos lá. O que eu preciso é o seguinte, no meu projeto eu quero que os usuários tenham permissões sobre o que podem ou não fazer no sistema. Ficando a critério de um usuário com mais permissões realizar esta configuração.Mas eu não desejo um controle de acesso dos usuários apenas a nível de formuários, digamos, eu não quero que se um usuário não puder cadastrar clientes, ele não seja capaz de abrir o formulário de clientes, afinal talvez o mesmo tenha permissão para visualizar, ou alterar.
Eu preciso que o controle de acesso não seja baseado apenas a nível de formuários, mas sim a nível de rotinas. Um usuário pode ter acesso ao formulário de contas a receber e não ter permissão para relizar uma baixa de um documento.
Enfim, eu quero poder controlar quais módulos o usuário pode acessar, e acima de tudo, o que ele pode realizar naquele módulo.
Uma alternativa que analisei foi o uso de ActionManagers, ou ActionLists, conforme verifiquei em um material da DevMedia. No entanto achei a metodologia válida apenas para controle de telas, mas não de rotinas que serão acionadas pelos usuários, uma vez que tenham acessado os formulários.Outra alternativa que verifiquei foi o uso de um componente chamado UserControlPackage (http://code.google.com/p/usercontrolpackage/), pareceu interessante, no entanto o projeto foi levado apenas até o Delphi 7. Até tentei instalar o mesmo aqui mas são muitos conflitos devido a grande diferença de versões (trabalho com o Delphi 2010).
Até onde sei terei que armazenar no banco formulários e permissões sobre o que cada um pode realizar no banco. Mas como efetuar o controle dos bloqueios mais específicos, por exemplo de uma rotina de um botão isolado no formulário, e que não existe nos demais forms?
O que eu gostaria de saber é o seguinte, quais são os métodos utilizados por aqueles que possuem algum sistema, a fim de controlar os acessos dos usuários dentro da aplicação?
Agradeço imensamente aqueles que puderem compartilhar um pouco do seu conhecimento.
Att.
Arthur de Andrade
Thebluemonkey
Melhor post
Claudia Nogueira
20/09/2012
Eu tenho a tabela de usuário, a tabela de classes de acesso e a tabela de permissões.
Nessa tabela de permissões fica armazenado tudo que o usuário logado não pode fazer no sistema.
No onCreate do datamodule eu carrego todos os acessos do meu sistema, e em cada lugar no programa que eu preciso verificar a classe eu faço um select no banco verificando se a classe de acesso do usuário logado tem permissão pra fazer tal operação.
No login do sistema eu carrego a classe de acesso do usuário logado.
Fiz um exemplo do jeito que eu trabalho.
Quando incluir uma nova funcionalidade no software e essa precisar de controle de acessos é só ir na função CarregaAcessos do DataModule e inserir ali, depois é só ir na tela Permissões e marcar sim ou não para classe de acesso selecionada.
[url]www.cdnweb.com.br/projeto_acesso.rar[/url]
Me fala o que você acha.
Mais Respostas
Joel Rodrigues
20/09/2012
Ao meu ver, você poderia usar o mesmo raciocínio para realizar o controle de ações dentro do formulário usando ActionList. A estrutura seria mais ou menos essa:
-Listar formulários (itens do menu principal)
--Para cada formulário, listar as Actions.
O usuário teria então a possibilidade de definir a permissão de acesso a um item do menu principal, ou às ações de cada formulário.
Ao abrir cada form, você precisaria verificar se o usuário tem acesso a cada Action.
Bom, é apenas uma ideia.
Boa sorte.
Claudia Nogueira
20/09/2012
Eu tenho a tabela de usuário, a tabela de classes de acesso e a tabela de permissões.
Nessa tabela de permissões fica armazenado tudo que o usuário logado não pode fazer no sistema.
No onCreate do datamodule eu carrego todos os acessos do meu sistema, e em cada lugar no programa que eu preciso verificar a classe eu faço um select no banco verificando se a classe de acesso do usuário logado tem permissão pra fazer tal operação.
No login do sistema eu carrego a classe de acesso do usuário logado.
Fiz um exemplo do jeito que eu trabalho.
Quando incluir uma nova funcionalidade no software e essa precisar de controle de acessos é só ir na função CarregaAcessos do DataModule e inserir ali, depois é só ir na tela Permissões e marcar sim ou não para classe de acesso selecionada.
[url]www.cdnweb.com.br/projeto_acesso.rar[/url]
Me fala o que você acha.
Esqueci de mencionar que fiz o exemplo usando Delphi7 com Firebird 2.0. O BD está na mesma pasta do projeto, e para acesso ao sistema tem dois usuários cadastrados. SV que está sem senha e VENDEDOR com senha 1234.
Thebluemonkey
20/09/2012
Ao meu ver, você poderia usar o mesmo raciocínio para realizar o controle de ações dentro do formulário usando ActionList. A estrutura seria mais ou menos essa:
-Listar formulários (itens do menu principal)
--Para cada formulário, listar as Actions.
O usuário teria então a possibilidade de definir a permissão de acesso a um item do menu principal, ou às ações de cada formulário.
Ao abrir cada form, você precisaria verificar se o usuário tem acesso a cada Action.
Bom, é apenas uma ideia.
Boa sorte.
Bom Joel, de fato é uma idéia válida, vou fazer alguns testes e verificar se é de fato viável.
Obrigado por responder.
Eu tenho a tabela de usuário, a tabela de classes de acesso e a tabela de permissões.
Nessa tabela de permissões fica armazenado tudo que o usuário logado não pode fazer no sistema.
No onCreate do datamodule eu carrego todos os acessos do meu sistema, e em cada lugar no programa que eu preciso verificar a classe eu faço um select no banco verificando se a classe de acesso do usuário logado tem permissão pra fazer tal operação.
No login do sistema eu carrego a classe de acesso do usuário logado.
Fiz um exemplo do jeito que eu trabalho.
Quando incluir uma nova funcionalidade no software e essa precisar de controle de acessos é só ir na função CarregaAcessos do DataModule e inserir ali, depois é só ir na tela Permissões e marcar sim ou não para classe de acesso selecionada.
[url]www.cdnweb.com.br/projeto_acesso.rar[/url]
Me fala o que você acha.
Esqueci de mencionar que fiz o exemplo usando Delphi7 com Firebird 2.0. O BD está na mesma pasta do projeto, e para acesso ao sistema tem dois usuários cadastrados. SV que está sem senha e VENDEDOR com senha 1234.
Claudia, eu baixei o exemplo que você disponibilizou. De fato tive problema com o login, rs Mas instalei o IBExpert aqui e havia conseguido a senha. rs Mas o fato é que ao rodar o exemplo fiquei bastante impressionado com a forma como o mesmo funciona, parece realmente se adequar ao que preciso.
Como tenho que trabalhar só vou ter tempo de analisar os fontes no final do dia. Mas assim que o fizer posto aqui mais detalhes sobre a minha experiência com o mesmo. Fico imensamente agradecido com o seu esforço em ajudar. Muito obrigado realmete.
Att.
Arthur de Andrade
Claudia Nogueira
20/09/2012
Alisson Santos
20/09/2012
Controles você pode criar de diversas formas e tipos, depende muito da necessidade que tem.
Por exemplo aqui na empresa que eu trabalho tivemos que desenvolver uma rotina de aprovação de vendas de clientes bloqueados que não encontramos nada na internet e montamos a rotina e desenvolvemos esse bloqueio.
Sempre que for trabalhar com o tipo de bloqueio mencionado, tem que ter uma tabela que irá gravar o que os usuários podem e não podem.
No caso do actionlist ou o actionmanager se criar o controle do botão a ele também poderá ser utilizado, pois ele é uma ótima ferramenta.
Só uma dica, pense sempre em utilizar recursos que o banco dispões.
Thebluemonkey
20/09/2012
Claudia,
Estou sim tendo algumas dificuldades em alguns pontos, deixe-me explicar um pouco delas, e principalmente, ver se entendi corretamente a metodologia utilizada. Acredito que até mesmo por ter um nível bastante iniciante no que diz respeito as metodologias de desenvolvimento em Delphi. Outra questão que me impediu um pouco foi o fato de eu não trabalhar com DBExpress, mas sim com SDAC e MSSQLServer. As dúvidas são as seguintes.
# Toda vez que é realizado o processo de inicialização do sistema a função CarregaAcessos, que possui ali na sua implementação os acessos do sistema, chama a função InsereAcessos passando estes acessos certo? Mas se esta função foi chamada na última execução do sistema como não ter conflitos "reinserindo" estes dados no banco?
# Percebi que o ClientDataSet CdsAcessos possui os campos "Classe, Descricao e Ordem", mas no entanto não está vinculado a nenhum objeto na sua propriedade CommandText. Estes campos são campos virtuais? Só ficarão disponíveis para consulta em runtime?
# Verifiquei que o CdsAcessos também possui os campos "Classe, Descricao, Ordem" e um adicional "TemPermissao". Estes campos também são campos virtuais certo? Estou tendo um pouco de dificuldade para compreender a relação entre os objetos da tabela SEM_PERMISSAO com os objetos tratados no sistema.
Fico sem jeito de expôr estas questões uma vez que você já me fez a enorme gentileza de me passar este exemplo. Até demorei para responder aqui porque estava aqui apanhando um pouquinho dele. rsrsrs Até insisto nele porque achei uma forma bastante inteligente de controlar os acessos no sistema.
Mas se você puder abordar estes aspectos que mencionei seria muito bom mesmo. De qualquer forma já estou muito agradecido.
Att.
Arthur de Andrade
Thebluemonkey
20/09/2012
Controles você pode criar de diversas formas e tipos, depende muito da necessidade que tem.
Por exemplo aqui na empresa que eu trabalho tivemos que desenvolver uma rotina de aprovação de vendas de clientes bloqueados que não encontramos nada na internet e montamos a rotina e desenvolvemos esse bloqueio.
Sempre que for trabalhar com o tipo de bloqueio mencionado, tem que ter uma tabela que irá gravar o que os usuários podem e não podem.
No caso do actionlist ou o actionmanager se criar o controle do botão a ele também poderá ser utilizado, pois ele é uma ótima ferramenta.
Só uma dica, pense sempre em utilizar recursos que o banco dispões.
Alisson, Obrigado por responder.
Na empresa ondem trabalho o sistema também possui rotinas bastante complexas de controle de usuários, com diversos tipos de bloqueios e estas rotinas de liberação de senha. O problema é que, além de eu desejar (com a ajuda de vocês) elaborar um processo que eu possa entender plenamente, eu também desejo algo em bastante menor escala.
Até cogitei a possibilidade de vincular actions a todos os botões de um formulário, mas imaginei que poderia ser impráticável implementar isso em um módulo de vendas por exemplo, onde existem inúmeros menus e "subformulários" com mais opçõoes. Outra coisa que me desanimou no que diz respeito ao uso das actions foi o fato de nao permitir a verificação de uma permissão no meio de uma rotina, para poder dar um exit ou abort.
Att.
Arthur de Andrade
Luiz Ferreira
20/09/2012
você pode me mandar um exemplo desse seu código>>> luizcarloscf@hotmail.com
Claudia Nogueira
20/09/2012
Claudia,
Estou sim tendo algumas dificuldades em alguns pontos, deixe-me explicar um pouco delas, e principalmente, ver se entendi corretamente a metodologia utilizada. Acredito que até mesmo por ter um nível bastante iniciante no que diz respeito as metodologias de desenvolvimento em Delphi. Outra questão que me impediu um pouco foi o fato de eu não trabalhar com DBExpress, mas sim com SDAC e MSSQLServer. As dúvidas são as seguintes.
# Toda vez que é realizado o processo de inicialização do sistema a função CarregaAcessos, que possui ali na sua implementação os acessos do sistema, chama a função InsereAcessos passando estes acessos certo? Mas se esta função foi chamada na última execução do sistema como não ter conflitos "reinserindo" estes dados no banco?
# Percebi que o ClientDataSet CdsAcessos possui os campos "Classe, Descricao e Ordem", mas no entanto não está vinculado a nenhum objeto na sua propriedade CommandText. Estes campos são campos virtuais? Só ficarão disponíveis para consulta em runtime?
# Verifiquei que o CdsAcessos também possui os campos "Classe, Descricao, Ordem" e um adicional "TemPermissao". Estes campos também são campos virtuais certo? Estou tendo um pouco de dificuldade para compreender a relação entre os objetos da tabela SEM_PERMISSAO com os objetos tratados no sistema.
Fico sem jeito de expôr estas questões uma vez que você já me fez a enorme gentileza de me passar este exemplo. Até demorei para responder aqui porque estava aqui apanhando um pouquinho dele. rsrsrs Até insisto nele porque achei uma forma bastante inteligente de controlar os acessos no sistema.
Mas se você puder abordar estes aspectos que mencionei seria muito bom mesmo. De qualquer forma já estou muito agradecido.
Att.
Arthur de Andrade
1 - # Toda vez que é realizado o processo de inicialização do sistema a função CarregaAcessos, que possui ali na sua implementação os acessos do sistema, chama a função InsereAcessos passando estes acessos certo? Mas se esta função foi chamada na última execução do sistema como não ter conflitos "reinserindo" estes dados no banco?
R: eu utilizo a função CarregaAcessos pra preencher um ClientDataSet como tabela temporária. Isso não envolve o banco de dados, pois eu não cadastro tudo que o sistema tem em tabela no BD. Somente deixo direto no software todas as possibilidades. No BD fica só uma tabela das coisas que o usuário não pode fazer. Quando por exemplo você desenvolver uma nova tela ou relatório, ou qualquer outra coisa, e essa coisa tenha que verificar se o usuário logado pode usar, vai fazer um SELECT na tabela SEM_PERMISSAO (função Permissao). Se retornar algum valor, quer dizer que o usuário logado não pode fazer tal coisa.
2 - # Percebi que o ClientDataSet CdsAcessos possui os campos "Classe, Descricao e Ordem", mas no entanto não está vinculado a nenhum objeto na sua propriedade CommandText. Estes campos são campos virtuais? Só ficarão disponíveis para consulta em runtime?
R: o CdsAcessos não está ligado a nenhuma tabela. É uma "tabela temporária", por isso não está ligada a nada.
3 - # Verifiquei que o CdsAcessos também possui os campos "Classe, Descricao, Ordem" e um adicional "TemPermissao". Estes campos também são campos virtuais certo? Estou tendo um pouco de dificuldade para compreender a relação entre os objetos da tabela SEM_PERMISSAO com os objetos tratados no sistema.
R:
Tabela USUARIO (Exemplo: o usuário SV que está ligado a classe de acesso 1)
Tabela CLASSE_ACESSO (Exemplo: a classe de acesso 1 dei o nome de SUPERVISOR)
Tabela SEM_PERMISSAO (Exemplo: os usuários da classe de acesso 1 não podem fazer venda, então tem um registro nessa tabela. ID_CLASSE_ACESSO = 1 e TELA = VENDA ). Esse nome venda eu inventei. Então no botão de venda eu coloquei a verificação:
if C_acessoDM.Permissao('VENDA', iClasseAcessoUsuario) then
Application.MessageBox('Tem permissão','Informação',MB_ICONINFORMATION+MB_OK)
else
Application.MessageBox('Não tem permissão','Informação',MB_ICONINFORMATION+MB_OK);
O CdsAcessos é um temporário que eu crio somente pra poder manipular em algum lugar do sistema, como na tela AcessosForm. Nessa tela eu marco o que cada classe pode ou não fazer, e somente no botão gravar é que grava de fato na tabela PERMISSAO. Faz uma passagem no CdsAcessos e tudo que estiver como Não, insere na tabela.
Eu acho melhor trabalhar dessa maneira, em vez de ter duas tabelas, uma com as funcionalidades do sistema e outra com o que o usuário pode ou não pode fazer.
Claudia Nogueira
20/09/2012
você pode me mandar um exemplo desse seu código>>> luizcarloscf@hotmail.com
[url]http://www.cdnweb.com.br/projeto_acesso.rar[/url]
Alisson Santos
20/09/2012
Bom esses tipos de controle são muitos pessoais então dificil falar qual o melhor ou o pior.
Existem muitas rotinas que podem ser utilizados como é no caso da empresa que eu trabalho.
A utilização de um action é mais facil pois pode varrer todos antes de abrir uma tela e verificar o status para o usuário.
Mais lembrando que exitem diversas formas, se quiser posso montar algo simples desse tipo de controle e mandar para você ver se te auxilia.
Thebluemonkey
20/09/2012
Alisson, é verdade, como você disse cada metodologia pode se aplicar a uma situação, ficando difícil mesmo falar qual melhor. rs Mas apesar de eu estar analisando o exemplo passado pela Claudia, eu gostaria muito sim de que, se estiver dentro das suas possibilidades do seu cronograma, você puder me enviar um exemplo com a sua sugestão de metodologia.
Afinal além de poder analisar os prós mais evidentes de cada um seria uma bela oportunidade para expandir meu conhecimento acerca do assunto, que se faz bastante necessário por sinal.
Meu email é andradedearthur@gmail.com.
Desde já agradeço a vocês pela boa vontade apresentada.
Att.
Arthur de Andrade
Alisson Santos
20/09/2012
Nícolas Braz
20/09/2012
Esse seu exemplo pode ser implementado para um controle de acessos por MainMenu?
Frederico Brigatte***
20/09/2012
Flavio Silva
20/09/2012
Poderia mandar para o meu email : flaviocabral@hotmail.com.br, um modelo de nivel de permissao comentado acima.
Estou finalizando uma aplicação e não tenho a minima ideia de como implementa-lo
obrigado.
Vanderson Freitas
20/09/2012
Bom Acho que o esquema que a claudia utiliza é muito interessante.
Uso Algo parecido Também ! Más acho que o que o amigo ta procurando é o jeito que eu mais gosto de utilizar.
Tenho 3 Tabelas:
1º Tabela de Usuarios ( normal a quase todos os sistemas de hoje em dia. )
2º Rotinas do Sistema ( Aqui é o que você quer controlar não importa se é menu, actionlist, acitonmanager, botões
funções, etc. ) seja o que tiver que ser controlado voce inclui nesta tabela de Rotina.
Ex: Botão incluir do Cadastro de Cliente, Menu de Vendas, Função EnviaEmail, etc.
3º Tabela de Usuarios Acessos( Aqui é que é o lance, você inclui os direitos que o cara tem no sistema )
A minha Função CheckAcessos verifica se o cara tem acesso a essa rotina.
Ex: No Click do Botão Incluir Cliente, no Menu de Vendas, Na Função EnviaEmail, Etc. a Função(CheckAcessos) vai la e faz um select na tabela de Usuario Acessos se a rotina tiver liberado então continua, Caso Contrario ele sai do código.
Codigo do Usuario = 01 / Codigo do Botao Incluir Cliente = 101 / Codigo do Menu de Vendas = 204.
Ex: Menu de Vendas ( CheckAcessos(01, 204, Codigo do Form(200)), Ou seja na Função ele seleciona da tabela de acessos do usuario se ele tem direito a essa rotina ( Passando o Codigo do usuario(01), Codigo da Rotina(204), e o codigo do Form(200)). se o Cara tiver esse acesso, então ele abre a tela de vendas caso contrario sai fora.
Baixa esse Exemplo que ta documentado e acho que é isso que você quer.
http://www.4shared.com/rar/SS79ky2m/controle_de_negocios.html
Flavio Silva
20/09/2012
Baixe seu Codigo e irei estuda-lo.
Desde já agradeço.
Flavio Silva
20/09/2012
É exatamente o que preciso, no que diz respeito a Permissões.
Como se trata de um Codigo Fonte Particular, gostaria de saber se posso usa-lo e adapta-lo a minha necessidade?
Outra Coisa, Trabalho sozinho e tenho um projeto futuro para desenvolver que será em datasnap, ja andei estudando sobre o assunto, porem, gostaria de saber se vc não tem algum exemplo que possa me indicar sobre regras de negocios no lado do cliente, por si tratar de meu primeiro desenvolvimento deste tipo, ainda existem alguns questionamento sobre o assunto (Regra de Negocio), como implementa-lo no lado do servidor e chama-lo (usa-lo )no lado do cliente.
Só um pouco visual, as vezes vendo consigo enter melhor.
Ja vi diversos exemplo na internet, mas nenhum trata diretamente de coisas objetivas, como por exemplos, Baixa de estoque, login, controle de caixa no lado do servidor, e melhores praticas de usa-los no lado do cliente.
Agradeço sua ajuda
Vanderson Freitas
20/09/2012
Pode usar o que você achar que te ajuda ai do controle de negocios.
Este projeto eu fiz (estou fazendo) a pedidos de amigos que trabalhou junto comigo.
Muitas pessoas tem muita dificuldades em OO, e Modulos de Sistema como (Estoque, Vendas, Faturamento).
E como na época eu estava implementando o uso de voz, para rastrear quantidade, entrada e saida de produtos em estoque.
Ai é que teve os pedidos para fazer um exemplo legal com essa parte, então decidi fazer esse projeto(sistema) com alguns
modulos interessantes usando esses recursos de voz.
Creio que quando finalizar todos os modulos vai ficar bem legal, alem do que quase tudo vai ser controlado por voz, é no minimo diferente.
O DataSnap em tenho os fontes de um pequeno sistema aqui, mas é de uma empresa que trabalhei, então não posso te mandar.
Vou dar uma olhada aqui acho que tenho alguns exemplos de coisas interessantes sobre datasnpa que eu mesmo fiz.
Vou olhar com calma e depois te mando.
Flavio Silva
20/09/2012
Flavio Silva
20/09/2012
Boa Tarde, mais uma vez.
Falavamos anteriormente sobre Datasnap, e vc informou que iria verificar se tinha algum exemplo sobre o assunto para disponibilizar.
Deu para dar uma olhada?
Lucas Ascencio
20/09/2012
obrigado, estou aberto a sugestoes e conselhos
Manoel Jr
20/09/2012
Edson
20/09/2012
Eu tenho a tabela de usuário, a tabela de classes de acesso e a tabela de permissões.
Nessa tabela de permissões fica armazenado tudo que o usuário logado não pode fazer no sistema.
No onCreate do datamodule eu carrego todos os acessos do meu sistema, e em cada lugar no programa que eu preciso verificar a classe eu faço um select no banco verificando se a classe de acesso do usuário logado tem permissão pra fazer tal operação.
No login do sistema eu carrego a classe de acesso do usuário logado.
Fiz um exemplo do jeito que eu trabalho.
Quando incluir uma nova funcionalidade no software e essa precisar de controle de acessos é só ir na função CarregaAcessos do DataModule e inserir ali, depois é só ir na tela Permissões e marcar sim ou não para classe de acesso selecionada.
[url]www.cdnweb.com.br/projeto_acesso.rar[/url]
Me fala o que você acha.
Esqueci de mencionar que fiz o exemplo usando Delphi7 com Firebird 2.0. O BD está na mesma pasta do projeto, e para acesso ao sistema tem dois usuários cadastrados. SV que está sem senha e VENDEDOR com senha 1234.
Olá Claudiadnh,
Seria possível enviar o código do controle de acesso, tentei baixar e o link esta quebrado.
Obrigado,
Edson
Nelson Santos
20/09/2012
www.3dsistemas.com.br
Nelson Santos
20/09/2012
www.3dsistemas.com.br
Joatan Lima
20/09/2012
Eu tenho a tabela de usuário, a tabela de classes de acesso e a tabela de permissões.
Nessa tabela de permissões fica armazenado tudo que o usuário logado não pode fazer no sistema.
No onCreate do datamodule eu carrego todos os acessos do meu sistema, e em cada lugar no programa que eu preciso verificar a classe eu faço um select no banco verificando se a classe de acesso do usuário logado tem permissão pra fazer tal operação.
No login do sistema eu carrego a classe de acesso do usuário logado.
Fiz um exemplo do jeito que eu trabalho.
Quando incluir uma nova funcionalidade no software e essa precisar de controle de acessos é só ir na função CarregaAcessos do DataModule e inserir ali, depois é só ir na tela Permissões e marcar sim ou não para classe de acesso selecionada.
[url]www.cdnweb.com.br/projeto_acesso.rar[/url]
Me fala o que você acha.
Esqueci de mencionar que fiz o exemplo usando Delphi7 com Firebird 2.0. O BD está na mesma pasta do projeto, e para acesso ao sistema tem dois usuários cadastrados. SV que está sem senha e VENDEDOR com senha 1234.
Olá Claudiadnh,
Seria possível enviar o código do controle de acesso, tentei baixar e o link esta quebrado.
Obrigado,
Joatan de Lima
e-mail: joatanlima@hotmail.com
Edson
20/09/2012
edson@openmailbox.org
Hardsoft Informática
20/09/2012
Eu tenho a tabela de usuário, a tabela de classes de acesso e a tabela de permissões.
Nessa tabela de permissões fica armazenado tudo que o usuário logado não pode fazer no sistema.
No onCreate do datamodule eu carrego todos os acessos do meu sistema, e em cada lugar no programa que eu preciso verificar a classe eu faço um select no banco verificando se a classe de acesso do usuário logado tem permissão pra fazer tal operação.
No login do sistema eu carrego a classe de acesso do usuário logado.
Fiz um exemplo do jeito que eu trabalho.
Quando incluir uma nova funcionalidade no software e essa precisar de controle de acessos é só ir na função CarregaAcessos do DataModule e inserir ali, depois é só ir na tela Permissões e marcar sim ou não para classe de acesso selecionada.
[url]www.cdnweb.com.br/projeto_acesso.rar[/url]
Me fala o que você acha.
Você, poderia me ceder o projeto_acesso por e-mail?? tentei acesso o link mais não esta funcionando... se de meu e-mail - marcosmta@hotmail.com.. e desde já muitíssimo obrigado.
Hardsoft Informática
20/09/2012
É exatamente o que preciso, no que diz respeito a Permissões.
Como se trata de um Codigo Fonte Particular, gostaria de saber se posso usa-lo e adapta-lo a minha necessidade?
Outra Coisa, Trabalho sozinho e tenho um projeto futuro para desenvolver que será em datasnap, ja andei estudando sobre o assunto, porem, gostaria de saber se vc não tem algum exemplo que possa me indicar sobre regras de negocios no lado do cliente, por si tratar de meu primeiro desenvolvimento deste tipo, ainda existem alguns questionamento sobre o assunto (Regra de Negocio), como implementa-lo no lado do servidor e chama-lo (usa-lo )no lado do cliente.
Só um pouco visual, as vezes vendo consigo enter melhor.
Ja vi diversos exemplo na internet, mas nenhum trata diretamente de coisas objetivas, como por exemplos, Baixa de estoque, login, controle de caixa no lado do servidor, e melhores praticas de usa-los no lado do cliente.
Agradeço sua ajuda
Vanderson, boa tarde.... Estou fazendo uns estudos para aplicar a mesma demanda aqui já discutida, mas ao clicar no link do projeto da como erro... talvez seja pelo tempo. Você pode enviar esse exemplo? Se puder, desde já te agradeço.... marcos.programadormta@gmail.com
Gustavo
20/09/2012
Desde já agradeço
Gustavo
20/09/2012
gustavoserafim_@hotmail.com <br />
Desde já agradeço