Fórum Fazer validação ao abrir form e fechá-lo ao negar acesso #318009

31/03/2006

0

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


Aldus

Aldus

Responder

Posts

01/04/2006

Aldus

Alguma idéia delphianos.


Responder

Gostei + 0

01/04/2006

Onjahyr

: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


Responder

Gostei + 0

03/04/2006

Aldus

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


Responder

Gostei + 0

03/04/2006

Paullsoftware

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:

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;
é mais ou menos assim :wink:


Responder

Gostei + 0

03/04/2006

Aldus

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


Responder

Gostei + 0

03/04/2006

Andremuller

Sobrescreva o método ShowModal;

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;



Responder

Gostei + 0

03/04/2006

Andremuller

O exemplo que mandei acima é para se você estiver utilizando ShowModal. Se estiver usando Show então é assim:

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?


Responder

Gostei + 0

03/04/2006

Aldus

Olá André, não existe um simples comando que feche o form na inicialização?
Mario


Responder

Gostei + 0

03/04/2006

Andremuller

tu tá usando show ou showmodal?


Responder

Gostei + 0

03/04/2006

Aldus

Estou usando somente showmodal


Responder

Gostei + 0

04/04/2006

Aldus

Alguma idéia


Responder

Gostei + 0

04/04/2006

Andremuller

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


Responder

Gostei + 0

04/04/2006

Paullsoftware

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:
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;



Responder

Gostei + 0

04/04/2006

Renato.pavan

Alguma idéia


Coloque o codigo abaixo no evento OnPaint do Form
  bPermissao := False;
  if not bPermissao then
    Close;



Responder

Gostei + 0

04/04/2006

Andremuller

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar