Limitar usuários
É isso.
Frederico Brigatte***
Respostas
Eliel Martins
22/06/2011
Não entendi, você está afirmando se é dessa forma que tem que fazer ?, caso seja isso que queira saber, o controle de usuário é sim feito dessa forma, agora um dica que deixo para você é que existe um componente muito bom chama UserControl, que faz tudo isso, tem criptografia de senha utilizando MD5, execelente componente é alem do mais ele é free.
Espero ter ajudado, se não te ajudei, por favor detalhe mais o que deseja.
Eliel G. Martins
Frederico Brigatte***
22/06/2011
Não entendi, você está afirmando se é dessa forma que tem que fazer ?, caso seja isso que queira saber, o controle de usuário é sim feito dessa forma, agora um dica que deixo para você é que existe um componente muito bom chama UserControl, que faz tudo isso, tem criptografia de senha utilizando MD5, execelente componente é alem do mais ele é free.
Espero ter ajudado, se não te ajudei, por favor detalhe mais o que deseja.
Eliel G. Martins
É como se fosse usar o UserControl, só que com componentes nativos do delphi mesmo. Estou com dificuldade em utilizar o UserControl.
Eliel Martins
22/06/2011
Se você interessar eu tenho algumas video aulas de como utilizar o UserControl, ele não é complicado não, se quiser mando no seu e-mail, só me passar seu e-mail que te envio hoje a noite. Também existe um controle de usuário da TMS que parece ser muito bom.
Eliel G. Martins
Frederico Brigatte***
22/06/2011
Se você interessar eu tenho algumas video aulas de como utilizar o UserControl, ele não é complicado não, se quiser mando no seu e-mail, só me passar seu e-mail que te envio hoje a noite. Também existe um controle de usuário da TMS que parece ser muito bom.
Eliel G. Martins
Ok, meu email é: frederico.brigatte@itelefonica.com.br
Qual é esse da TMS, é free, onde baixar? Tem exemplo?
Frederico Brigatte***
22/06/2011
Se você interessar eu tenho algumas video aulas de como utilizar o UserControl, ele não é complicado não, se quiser mando no seu e-mail, só me passar seu e-mail que te envio hoje a noite. Também existe um controle de usuário da TMS que parece ser muito bom.
Eliel G. Martins
Ok, meu email é: frederico.brigatte@itelefonica.com.br
Qual é esse da TMS, é free, onde baixar? Tem exemplo?
Bom dia Eliel, vc não enviou pra mim.
Anderson Nunes
22/06/2011
Frederico Brigatte***
22/06/2011
Teria como fazer um exemplo, nunca fiz isso. Estou com dificuldades. E empacado nisso.
Anderson Nunes
22/06/2011
Frederico Brigatte***
22/06/2011
Quer meu email? Agradeço por enquanto.
frederico.brigatte@itelefonica.com.br
Adalton Goncalves
22/06/2011
http://www.linhadecodigo.com.br/artigo/822/Delphi-Controle-de-AcessoTreeView-para-gerenciamento-de-usu%C3%A1rios.aspx
Frederico Brigatte***
22/06/2011
http://www.linhadecodigo.com.br/artigo/822/Delphi-Controle-de-AcessoTreeView-para-gerenciamento-de-usu%C3%A1rios.aspx
Ok, aguardo. Obrigado por hora, ok. Muito obrigado.
Adalton Goncalves
22/06/2011
Vamos supor que seu sistema tenha 3 níveis de acesso.
Nivel 1 - Mínimo (funções básicas. Ex: Apenas Consulta)
Nivel 2 - Intermediário(todas do N1, mais algumas. Ex: Inclusão)
Nivel 3 - Total (Todas acima, mais inclusão e alteração)
Na propriedade tag do menu(ou o que estiver controlando(forms, botões, etc) você define qual o nível necessário para acessar essa função. No cadastramento do usuario (na tabela) você teria a indicação sobre qual nível de acesso esse usuário tem, baseando nos níveis cadastrados no sistema, ou seja 1 menor acesso à 3 nível administrador.
A implementação pode ser feita de várias formas, no caso de controle no Menu(depende muito da sua necessidade), a cada clique no menu poderia fazer a verificação:
procedure TForm1.MnuCadastroClick(Sender :TObject);
begin
if Nivel_Usuario < (Sender as TMenuItem).Tag then
begin
ShowMessage('Você não possui autorização para acessar esta função!');
Exit; // Encerra execução do procedimento
end
// segue com o código normalmente
...
end;
Mas também, você poderia, "após validar o usuário", verificar todos os seus itens de menu e ocultá-los caso o nível de acesso do usuário fosse inferior ao valor da tag dos mesmos e, neste caso, não seria necessário fazer as validações.
Exemplo:
// Procedimento para "mapear" todos os itens do menu procedure SetMenuAccess(Menu :TMenuItem; AccessLevel :Integer); var Idx :Integer; begin for Idx := 0 to Menu.Count -1 do begin // habilita ou não item conforme nível de acesso configurado Menu.Items[Idx].Enabled := Menu.Items[Idx].Tag <= AccessLevel; // apenas se habilitado é que processa os sub-menus if Menu.Items[Idx].Enabled then SetMenuAccess(Menu.Items[Idx], AccessLevel); end; end;
ou entao caso os bloqueios sejam internos (exemplo: o usuario pode abrir o form, mas alguns botoes depende dos privilégios) faça o mesmo procedimento acima de varredura, mas defina no evento onCreate do form, para que ao criar o form ele já defina o que vai estar visible (ou enabled).
Espero ter ajudado.
Qualquer duvida, estou a disposição.
Frederico Brigatte***
22/06/2011
Vamos supor que seu sistema tenha 3 níveis de acesso.
Nivel 1 - Mínimo (funções básicas. Ex: Apenas Consulta)
Nivel 2 - Intermediário(todas do N1, mais algumas. Ex: Inclusão)
Nivel 3 - Total (Todas acima, mais inclusão e alteração)
Na propriedade tag do menu(ou o que estiver controlando(forms, botões, etc) você define qual o nível necessário para acessar essa função. No cadastramento do usuario (na tabela) você teria a indicação sobre qual nível de acesso esse usuário tem, baseando nos níveis cadastrados no sistema, ou seja 1 menor acesso à 3 nível administrador.
A implementação pode ser feita de várias formas, no caso de controle no Menu(depende muito da sua necessidade), a cada clique no menu poderia fazer a verificação:
procedure TForm1.MnuCadastroClick(Sender :TObject);
begin
if Nivel_Usuario < (Sender as TMenuItem).Tag then
begin
ShowMessage('Você não possui autorização para acessar esta função!');
Exit; // Encerra execução do procedimento
end
// segue com o código normalmente
...
end;
Mas também, você poderia, "após validar o usuário", verificar todos os seus itens de menu e ocultá-los caso o nível de acesso do usuário fosse inferior ao valor da tag dos mesmos e, neste caso, não seria necessário fazer as validações.
Exemplo:
// Procedimento para "mapear" todos os itens do menu procedure SetMenuAccess(Menu :TMenuItem; AccessLevel :Integer); var Idx :Integer; begin for Idx := 0 to Menu.Count -1 do begin // habilita ou não item conforme nível de acesso configurado Menu.Items[Idx].Enabled := Menu.Items[Idx].Tag <= AccessLevel; // apenas se habilitado é que processa os sub-menus if Menu.Items[Idx].Enabled then SetMenuAccess(Menu.Items[Idx], AccessLevel); end; end;
ou entao caso os bloqueios sejam internos (exemplo: o usuario pode abrir o form, mas alguns botoes depende dos privilégios) faça o mesmo procedimento acima de varredura, mas defina no evento onCreate do form, para que ao criar o form ele já defina o que vai estar visible (ou enabled).
Espero ter ajudado.
Qualquer duvida, estou a disposição.
Para os níveis de acesso, preciso criar uma tabela? Teria como montar um exemplo para que possa adaptar?
Frederico Brigatte***
22/06/2011
Vamos supor que seu sistema tenha 3 níveis de acesso.
Nivel 1 - Mínimo (funções básicas. Ex: Apenas Consulta)
Nivel 2 - Intermediário(todas do N1, mais algumas. Ex: Inclusão)
Nivel 3 - Total (Todas acima, mais inclusão e alteração)
Na propriedade tag do menu(ou o que estiver controlando(forms, botões, etc) você define qual o nível necessário para acessar essa função. No cadastramento do usuario (na tabela) você teria a indicação sobre qual nível de acesso esse usuário tem, baseando nos níveis cadastrados no sistema, ou seja 1 menor acesso à 3 nível administrador.
A implementação pode ser feita de várias formas, no caso de controle no Menu(depende muito da sua necessidade), a cada clique no menu poderia fazer a verificação:
procedure TForm1.MnuCadastroClick(Sender :TObject);
begin
if Nivel_Usuario < (Sender as TMenuItem).Tag then
begin
ShowMessage('Você não possui autorização para acessar esta função!');
Exit; // Encerra execução do procedimento
end
// segue com o código normalmente
...
end;
Mas também, você poderia, "após validar o usuário", verificar todos os seus itens de menu e ocultá-los caso o nível de acesso do usuário fosse inferior ao valor da tag dos mesmos e, neste caso, não seria necessário fazer as validações.
Exemplo:
// Procedimento para "mapear" todos os itens do menu procedure SetMenuAccess(Menu :TMenuItem; AccessLevel :Integer); var Idx :Integer; begin for Idx := 0 to Menu.Count -1 do begin // habilita ou não item conforme nível de acesso configurado Menu.Items[Idx].Enabled := Menu.Items[Idx].Tag <= AccessLevel; // apenas se habilitado é que processa os sub-menus if Menu.Items[Idx].Enabled then SetMenuAccess(Menu.Items[Idx], AccessLevel); end; end;
ou entao caso os bloqueios sejam internos (exemplo: o usuario pode abrir o form, mas alguns botoes depende dos privilégios) faça o mesmo procedimento acima de varredura, mas defina no evento onCreate do form, para que ao criar o form ele já defina o que vai estar visible (ou enabled).
Espero ter ajudado.
Qualquer duvida, estou a disposição.
Para os níveis de acesso, preciso criar uma tabela? Teria como montar um exemplo para que possa adaptar?
Não entendi bem esse código, desculpe. Precisa montar uma tabela?
Adalton Goncalves
22/06/2011
Para os níveis de acesso, preciso criar uma tabela? Teria como montar um exemplo para que possa adaptar?
Não entendi bem esse código, desculpe. Precisa montar uma tabela?
Ahh sim, perdão pela demora em responder, me enrolei num projeto aqui.
A quesão chave aqui, é o "controle de usuário", na tabela de usuário, voce deve definir um campo para este controle. Com o uso da tag dos componentes, um campo Nivel_Usuario sendo Integer já resolve o problemas aí sim, este campo recebe os valores de acesso.
Seguindo aquele exemplo:
Vamos supor que seu sistema tenha 3 níveis de acesso.
Nivel 1 - Mínimo (funções básicas. Ex: Apenas Consulta)
Nivel 2 - Intermediário(todas do N1, mais algumas. Ex: Inclusão)
Nivel 3 - Total (Todas acima, mais inclusão e alteração)
Ou seja o admin vai receber no field da tabela user Nivel_User o valor 3, e assim por diante.
se caso o bloqueio de comando for ao clicar no menu, que nem o primeiro exemplo:
procedure TForm1.MnuCadastroClick(Sender :TObject);
begin
if Nivel_Usuario < (Sender as TMenuItem).Tag then
begin
ShowMessage('Você não possui autorização para acessar esta função!');
Exit; // Encerra execução do procedimento
end
// segue com o código normalmente
...
end;
Este if está verificando o field Nivel_Usuario da tabela.
Já no segundo exemplo:
// Procedimento para "mapear" todos os itens do menu procedure SetMenuAccess(Menu :TMenuItem; AccessLevel :Integer); var Idx :Integer; begin for Idx := 0 to Menu.Count -1 do begin // habilita ou não item conforme nível de acesso configurado Menu.Items[Idx].Enabled := Menu.Items[Idx].Tag <= AccessLevel; // apenas se habilitado é que processa os sub-menus if Menu.Items[Idx].Enabled then SetMenuAccess(Menu.Items[Idx], AccessLevel); end; end;
Aqui está lendo todos os menus, para poder desabilitar aqueles em que o usuário não é autorizado a ver, para isso ele verifica novamente o field Nivel_Usuario da tabela e chama a procedure enviando o valor deste campo como AccessLevel.
Entao eis a questao, o sistema irá iniciar somente após o usuario colocar seu login e senha, que vai ser verificado na tabela, assim que foi autenticado, e antes de iniciar o form(entao esse procedimento deve estar no onCreate), ele irá verificar o Nivel_Usuario e chamar a procedure. Ou melhor ainda, pensando aqui, de maneira breve, ao invés de camar o procedimento, faz isso na procedure OnCreate mesmo, envia as info do user para uma variável global(isso deve ser feito de qualquer forma), e faz a verificação da variável com as tag.
Adalton Goncalves
22/06/2011
Este if está verificando o field Nivel_Usuario da tabela.
Quando disse isso quis dizer que o campo Nivel_User da tabela, já está carregado na variável global "Nivel_Usuario:Integer". Assim você já está verificando se o usuário pode ou não visualizar este formulário.
Se tiver ainda com dúvida, só avisar.
Frederico Brigatte***
22/06/2011
Este if está verificando o field Nivel_Usuario da tabela.
Quando disse isso quis dizer que o campo Nivel_User da tabela, já está carregado na variável global "Nivel_Usuario:Integer". Assim você já está verificando se o usuário pode ou não visualizar este formulário.
Se tiver ainda com dúvida, só avisar.
Adalton, tem como postar um exemplo ou enviar para meu email: frederico.brigatte@itelefonica.com.br para que possa entender melhor, tá muito complicado isso, e o pior é que to precisando muito disso. Agradeço a atenção e não precisa se desculpar, eu é que peço desculpas por incomodar, é porque nunca fiz isso e entendo melhor com algo já pronto, ok, mas estou lendo o que vc posta, ai tento entender, tem como fazer um simples pra mim?
Adalton Goncalves
22/06/2011
Carlos Leonel
22/06/2011
Frederico Brigatte***
22/06/2011
Ok, obrigado pela ajuda. Está me ajudando bastante. Obrigado mesmo. Vou aguardar.
Frederico Brigatte***
22/06/2011
Ok, obrigado pela ajuda. Está me ajudando bastante. Obrigado mesmo. Vou aguardar.
Oi Adalton, não teve tempo de fazer ainda? Estou no aguardo, ok?
Frederico Brigatte***
22/06/2011
Ok, obrigado pela ajuda. Está me ajudando bastante. Obrigado mesmo. Vou aguardar.
Oi Adalton, não teve tempo de fazer ainda? Estou no aguardo, ok?
Oi Adalton, desculpa a cobrança, mas vc conseguiu fazer pra mim? Estou travado nisso, aguardando a sua ajuda.
Frederico Brigatte***
22/06/2011
Ok, obrigado pela ajuda. Está me ajudando bastante. Obrigado mesmo. Vou aguardar.
Oi Adalton, não teve tempo de fazer ainda? Estou no aguardo, ok?
Oi Adalton, desculpa a cobrança, mas vc conseguiu fazer pra mim? Estou travado nisso, aguardando a sua ajuda.
Nada Ainda. Aguardando..
Frederico Brigatte***
22/06/2011
Ok, obrigado pela ajuda. Está me ajudando bastante. Obrigado mesmo. Vou aguardar.
Oi Adalton, não teve tempo de fazer ainda? Estou no aguardo, ok?
Oi Adalton, desculpa a cobrança, mas vc conseguiu fazer pra mim? Estou travado nisso, aguardando a sua ajuda.
Nada Ainda. Aguardando..
Adalton, ainda não postou o exemplo, estou no aguardo ainda..
Frederico Brigatte***
22/06/2011
Ok, obrigado pela ajuda. Está me ajudando bastante. Obrigado mesmo. Vou aguardar.
Oi Adalton, não teve tempo de fazer ainda? Estou no aguardo, ok?
Oi Adalton, desculpa a cobrança, mas vc conseguiu fazer pra mim? Estou travado nisso, aguardando a sua ajuda.
Nada Ainda. Aguardando..
Adalton, ainda não postou o exemplo, estou no aguardo ainda..
Onde está meu exemplo?
Frederico Brigatte***
22/06/2011
Ok, obrigado pela ajuda. Está me ajudando bastante. Obrigado mesmo. Vou aguardar.
Oi Adalton, não teve tempo de fazer ainda? Estou no aguardo, ok?
Oi Adalton, desculpa a cobrança, mas vc conseguiu fazer pra mim? Estou travado nisso, aguardando a sua ajuda.
Nada Ainda. Aguardando..
Adalton, ainda não postou o exemplo, estou no aguardo ainda..
Onde está meu exemplo?
Esqueceram de mim???
José Curdo
22/06/2011
1- Soluções que assinalam em uma tabela o usuário logado, podem nunca receber um status final de login OFF. Logo compromete a contagem.
2- Se for controlar os logins no BD, pior ainda, já que em uma aplicação n-Tier, com uma camada física intermediando o meio de campo entre a base de dados e o aplicativo de login, normalmente está debaixo de processo de pooled de conexões.
Sds.
Frederico Brigatte***
22/06/2011
1- Soluções que assinalam em uma tabela o usuário logado, podem nunca receber um status final de login OFF. Logo compromete a contagem.
2- Se for controlar os logins no BD, pior ainda, já que em uma aplicação n-Tier, com uma camada física intermediando o meio de campo entre a base de dados e o aplicativo de login, normalmente está debaixo de processo de pooled de conexões.
Sds.
Estou com dificuldade em fazer isso por ser minha primeira vez programar para isso. Teria algum exemplo?
Frederico Brigatte***
22/06/2011
1- Soluções que assinalam em uma tabela o usuário logado, podem nunca receber um status final de login OFF. Logo compromete a contagem.
2- Se for controlar os logins no BD, pior ainda, já que em uma aplicação n-Tier, com uma camada física intermediando o meio de campo entre a base de dados e o aplicativo de login, normalmente está debaixo de processo de pooled de conexões.
Sds.
Estou com dificuldade em fazer isso por ser minha primeira vez programar para isso. Teria algum exemplo?
Ninguém?
Frederico Brigatte***
22/06/2011
Poderia enviar o exemplo para mim, estou precisando. Meu email é: frederico.brigatte@gmail.com
Frederico Brigatte***
22/06/2011
Espero um retorno seu, ainda não consegui fazer isso.