Fórum Limitar usuários #403516

22/06/2011

0

Estou querendo fazer um sistema de login com perfil de usuário, ou seja, o usuário fulano pode acessar o menu x, y e z. O usuário beltrano tem acesso aos menus a, x e z; O usuário admim tem acesso a todos os menus.

É isso.
Frederico Brigatte***

Frederico Brigatte***

Responder

Posts

22/06/2011

Eliel Martins

  Olá Frederico !


  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
Responder

Gostei + 0

22/06/2011

Frederico Brigatte***

  Olá Frederico !


  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

Ler Mais...



É como se fosse usar o UserControl, só que com componentes nativos do delphi mesmo. Estou com dificuldade em utilizar o UserControl.
Responder

Gostei + 0

22/06/2011

Eliel Martins

  Olá Frederico !


  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
Responder

Gostei + 0

22/06/2011

Frederico Brigatte***

  Olá Frederico !


  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?
Responder

Gostei + 0

24/06/2011

Frederico Brigatte***

  Olá Frederico !


  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?

Ler Mais...



Bom dia Eliel, vc não enviou pra mim.
Responder

Gostei + 0

25/06/2011

Anderson Nunes

Olha, me ocorreu derepente uma forma aqui, você teria que testar para ver se funcionaria e se ficaria viavel. Bom, voce criaria uma tabela de usuarios e uma tabela filha par acada usuario, esta tabela teria basicamente o campo para identificar o usuario e o campo para o nome do formulario, ainda com o form de cadstro de usuario voce vai clicando sobre os menus e abrindo os forms que o usuario não poderá acessar, e ao abrir o form ira salvar seu nome na tabela filha do usuario, poderá fazer para todos os forms ou ações, dando bastante maleabilidade. Nos eventos de abertura dos forms, voce faz uma busca pelo nome do form na tabela e se não houver nada ele abre e se houver ele apresenta uma mensagem de bloqueio. Sei lá, derepente seja inviavel mas voce pode pensar e adaptar esta ideia para sua necessidade..valeu.. 
Responder

Gostei + 0

25/06/2011

Frederico Brigatte***

Olha, me ocorreu derepente uma forma aqui, você teria que testar para ver se funcionaria e se ficaria viavel. Bom, voce criaria uma tabela de usuarios e uma tabela filha par acada usuario, esta tabela teria basicamente o campo para identificar o usuario e o campo para o nome do formulario, ainda com o form de cadstro de usuario voce vai clicando sobre os menus e abrindo os forms que o usuario não poderá acessar, e ao abrir o form ira salvar seu nome na tabela filha do usuario, poderá fazer para todos os forms ou ações, dando bastante maleabilidade. Nos eventos de abertura dos forms, voce faz uma busca pelo nome do form na tabela e se não houver nada ele abre e se houver ele apresenta uma mensagem de bloqueio. Sei lá, derepente seja inviavel mas voce pode pensar e adaptar esta ideia para sua necessidade..valeu.. 


Teria como fazer um exemplo, nunca fiz isso. Estou com dificuldades. E empacado nisso.
Responder

Gostei + 0

25/06/2011

Anderson Nunes

Ta eu vou fazer um exemplo com clientdataset, voce ajusta para sua necessidade..


Responder

Gostei + 0

25/06/2011

Frederico Brigatte***

Ta eu vou fazer um exemplo com clientdataset, voce ajusta para sua necessidade..




Quer meu email? Agradeço por enquanto.

frederico.brigatte@itelefonica.com.br
Responder

Gostei + 0

26/06/2011

Adalton Goncalves

Um jeito simples de você fazer, é nos menus utilizar o propriedade "tag"...definindo assim, pode definir a que menus cada usuario pode ter acesso. Agora estou fora da minha máquina, mas amanhã lhe posto um exemplo prático, agora com componente externo tem esse exemplo do site parceiro:

http://www.linhadecodigo.com.br/artigo/822/Delphi-Controle-de-AcessoTreeView-para-gerenciamento-de-usu%C3%A1rios.aspx
Responder

Gostei + 0

27/06/2011

Frederico Brigatte***

Um jeito simples de você fazer, é nos menus utilizar o propriedade "tag"...definindo assim, pode definir a que menus cada usuario pode ter acesso. Agora estou fora da minha máquina, mas amanhã lhe posto um exemplo prático, agora com componente externo tem esse exemplo do site parceiro:

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.
Responder

Gostei + 0

27/06/2011

Adalton Goncalves

Bom vamos lá, vou tentar dar um exemplo simples para explicar isso:
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:

1
2
3
4
5
6
7
8
9
10
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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.
Responder

Gostei + 0

27/06/2011

Frederico Brigatte***

Bom vamos lá, vou tentar dar um exemplo simples para explicar isso:
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:

1
2
3
4
5
6
7
8
9
10
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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.

Ler Mais...



Para os níveis de acesso, preciso criar uma tabela? Teria como montar um exemplo para que possa adaptar?
Responder

Gostei + 0

28/06/2011

Frederico Brigatte***

Bom vamos lá, vou tentar dar um exemplo simples para explicar isso:
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:

1
2
3
4
5
6
7
8
9
10
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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.

Ler Mais...



Para os níveis de acesso, preciso criar uma tabela? Teria como montar um exemplo para que possa adaptar?

Ler Mais...



Não entendi bem esse código, desculpe. Precisa montar uma tabela?
Responder

Gostei + 0

28/06/2011

Adalton Goncalves


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:
Bom vamos lá, vou tentar dar um exemplo simples para explicar isso:
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:

1
2
3
4
5
6
7
8
9
10
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;

Ler Mais...



Este if está verificando o field Nivel_Usuario da tabela.

Já no segundo exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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;

Ler Mais...


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.
Responder

Gostei + 0

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

Aceitar