Fazer validação ao abrir form e fechá-lo ao negar acesso
Olá amigos, criei uma rotina de liberação dos níveis do sistema, sendo que se o usuário não estiver apto a acessar determinado cadastro ou rotina, deve-se cancelar sua execução.
Exemplo:
- Usuário não tem acesso ao cadastro de produtos
- Onde faço a validação e como cancelo a execução do form, já tentei no Create, Active e no Show e o ´Close´ não funciona, consigo fazer a validação sem problemas.
Até
Mario
Exemplo:
- Usuário não tem acesso ao cadastro de produtos
- Onde faço a validação e como cancelo a execução do form, já tentei no Create, Active e no Show e o ´Close´ não funciona, consigo fazer a validação sem problemas.
Até
Mario
Aldus
Curtidas 0
Respostas
Aldus
31/03/2006
Alguma idéia delphianos.
GOSTEI 0
Onjahyr
31/03/2006
:lol: SIM.
Você cria um campo no BD com acompanhamento de cada usuário. Quem pode o que, entende?
Na revista ClubeDelphi Edições 38 (Interbase) e 19 (paradox).
A Edição 19 tem um aplicativo de controle completo e bem elaborado de como controlar quem pode ter acesso ou não...
Já na edição 38, você tem que fazer via código ou diretamente no BD do Interbase, mas não tem um aplicativo de controle. Mas pode ser criado, claro!
Eu prefiro a edição 19 (opção minha)
Falowww
SITEVIRTUAL
Você cria um campo no BD com acompanhamento de cada usuário. Quem pode o que, entende?
Na revista ClubeDelphi Edições 38 (Interbase) e 19 (paradox).
A Edição 19 tem um aplicativo de controle completo e bem elaborado de como controlar quem pode ter acesso ou não...
Já na edição 38, você tem que fazer via código ou diretamente no BD do Interbase, mas não tem um aplicativo de controle. Mas pode ser criado, claro!
Eu prefiro a edição 19 (opção minha)
Falowww
SITEVIRTUAL
GOSTEI 0
Aldus
31/03/2006
Obrigado pela atenção, mas o modo de controlar eu já desenvolvi, apenas gostaria de saber como fechar o form ao negar a validação.
Mario
Mario
GOSTEI 0
Paullsoftware
31/03/2006
a melhor maneira de impedir o acesso a determinadas partes do sistema é desabilitando-a conforme os critérios da tabela permissões..
ao validar o login do usuário vc deve fazer uma verificação tb em uma tabela que guarde todas as permissoes para esse usuários por exemplo:
...
na hora de usar...
é mais ou menos assim :wink:
ao validar o login do usuário vc deve fazer uma verificação tb em uma tabela que guarde todas as permissoes para esse usuários por exemplo:
Table permissoes:
MClientes = VarChar;
MUsuários = VarChar;
MFuncionarios = VarChar;
MProdutos = VarChar;
MEstoque = VarChar;
MPedidos = VarChar;
...
na hora de usar...
if QyMClientes.AsString = ´S´ then MClientes.Enabled := True else MClientes.Enabled := False; if QyMUsuarios.AsString = ´S´ then MUsuarios.Enabled := True else MUsuarios.Enabled := False; if QyMFuncionarios.AsString = ´S´ then MFuncionarios.Enabled := True else MFuncionarios.Enabled := False; if QyMProdutos.AsString = ´S´ then MProdutos.Enabled := True else MProdutos.Enabled := False; if QyMEstoque.AsString = ´S´ then MEstoque.Enabled := True else MEstoque.Enabled := False; if QyMPedidos.AsString = ´S´ then MPedidos.Enabled := True else MPedidos.Enabled := False;
GOSTEI 0
Aldus
31/03/2006
Obrigado Paull pela atenção, mas a forma do cadastro das permissões já está pronto, apenas quero fechar o form ao ser negada sua permissão. Inabilitar a opção do menu não é suficiente, pois se meu cliente estiver da entrada de produtos e pressionar F4 será aberto o cadastro de produtos, por isso a importância de validar ao tentar abrir o form.
Mario
Mario
GOSTEI 0
Andremuller
31/03/2006
Sobrescreva o método ShowModal;
então só execute a herança se o usuário tiver permissão
public function ShowModal: integer; override;
então só execute a herança se o usuário tiver permissão
function TForm1.ShowModal: integer; begin if PossuiPermissao then Result := inherited ShowModal; end;
GOSTEI 0
Andremuller
31/03/2006
O exemplo que mandei acima é para se você estiver utilizando ShowModal. Se estiver usando Show então é assim:
nos dois casos o form só será exibido caso o usuário tenha permissão.
isso resolve?
public procedure Show; reintroduce;
procedure TForm1.Show; begin if PossuiPermissao then inherited Show; end;
nos dois casos o form só será exibido caso o usuário tenha permissão.
isso resolve?
GOSTEI 0
Aldus
31/03/2006
Olá André, não existe um simples comando que feche o form na inicialização?
Mario
Mario
GOSTEI 0
Andremuller
31/03/2006
tu tá usando show ou showmodal?
GOSTEI 0
Aldus
31/03/2006
Estou usando somente showmodal
GOSTEI 0
Aldus
31/03/2006
Alguma idéia
GOSTEI 0
Andremuller
31/03/2006
Realmente desconheço qualquer comando que possa retirar um Show que ainda não foi executado, dar close sem o form ter realmente aparecido na tela.
A técnica que passei é bem organizada visto tu realmente estar especializando um comportamento da classe TForm na tua nova classe, quer dizer que se tu usar a dica que passei, além de funcionar, ainda vai estar utilizando conceitos de OO. Não vejo porque procurar mais.
Na realidade essa consistência deveria ser feita antes da criação da instância da classe, não há necessidade de alocar todos recursos necessários para trabalho na interface se o usuário não tem permissão. De qualquer forma se dessa forma foi implementado a solução que passei resolve teu problema de uma forma bem organizada
sds
A técnica que passei é bem organizada visto tu realmente estar especializando um comportamento da classe TForm na tua nova classe, quer dizer que se tu usar a dica que passei, além de funcionar, ainda vai estar utilizando conceitos de OO. Não vejo porque procurar mais.
Na realidade essa consistência deveria ser feita antes da criação da instância da classe, não há necessidade de alocar todos recursos necessários para trabalho na interface se o usuário não tem permissão. De qualquer forma se dessa forma foi implementado a solução que passei resolve teu problema de uma forma bem organizada
sds
GOSTEI 0
Paullsoftware
31/03/2006
acho que o que você quer não é complicado, porém, deve ser criado variaveis globais onde, cada uma delas é respossável por permitir ou não o acesso a determinada parte do sistema tipo:
[b:06183976f7]wCadPro:Boolean;[/b:06183976f7]
e na hora da chamada ao form você faria algo semelhante a isso:
[b:06183976f7]wCadPro:Boolean;[/b:06183976f7]
e na hora da chamada ao form você faria algo semelhante a isso:
if Not wCadPro then begin MessageDlg(´Você não possui prvilérgios para acessar essa área do sistema. Acesso negado!´,MtInformation,[MbOk],0); Exit; end else begin //Comandos para abrir o seu form... end;
GOSTEI 0
Renato.pavan
31/03/2006
Alguma idéia
Coloque o codigo abaixo no evento OnPaint do Form
bPermissao := False; if not bPermissao then Close;
GOSTEI 0
Andremuller
31/03/2006
caso optes pela última dica, cuidado para não colocar o método de busca da permissão no evento OnPaint, somente utilize a flag como indicou o colega. Isso porque o evento é executado a cada refresh do form.
GOSTEI 0
Aldus
31/03/2006
Obrigado amigos pelas dicas, mas preferia a que crio a verificação antes de acessar o form, ficando as chamadas centralizadas em única unit.
Até
Mario
Até
Mario
GOSTEI 0