Controle de permissões via TMainMenu

Delphi

06/06/2007

fiz um sistema proprio de controle de usuários, porem a rotina de blockeio que criei não esta funcionando.

procedure TFUsers.Blockeia(Menu: TMenuItem);
Var
 X: Integer;
 Aux: String;
begin
  with DataBase.IBUsers do
   begin
     Close;
     SQL.Clear;
     SQL.Add(´select * from acessos where id_user=´ + QuotedStr(LOGIN_ID_USER));
     Open;
     if (RecordCount = 0) then
      begin
        Exit; 
      end;

     for X := 0 to (Menu.Count - 1) do
      begin
        First;
        while not Eof do
         begin
           Aux := Trim(FieldByName(´secao´).AsString);
           if (Aux = Menu.Items[X].Caption) then
            begin
              Menu.Items[X].Visible := False;
            end;
           Next;
         end;

      if (Menu.Items[X].Count > 0) then
       begin
         Blockeia(Menu.Items[X]);
       end;
       
     end;
   end;
end;


ela deve percorrer todo os itens do MainMenu, e deixar eles invisíveis caso eles existam no banco, pois eu to salvando no banco os itens que o usuário não tera acesso.. axei mais simples partir deste principio, apenas utilizara mais rows dependendo da situação..
espero que alguem possa me auziliar.
abraço a todos


Nightshade

Nightshade

Curtidas 0

Respostas

Nightshade

Nightshade

06/06/2007

estou apanhando nesse problema ainda.. :T
se alguem poder me da uma ajuda agraedço


GOSTEI 0
Paullsoftware

Paullsoftware

06/06/2007

Teve uma Edição da clubdelphi que saiu um artigo completo que como fazer isso, vou ver qual foi a Edição e te mando o exemplo blz!


GOSTEI 0
Nightshade

Nightshade

06/06/2007

valeu :D
eu ja fiz todo o sistema de permissoes, cadastro de usuarios, controle de senhas, parte de liberação de seçoes por usuarios.. tudo
apenas preciso de uma rotina q varra todo meu menu, e caso o nome dele for igual o da atual row do banco, ele deixe invisível.
isto ai servira para usuarios q nao tem acesso a determinadas seçoes nao poderem se dar permissao em areas inacessiveis e nem cadastrar novos usuarios com mais nivel q ele..
bolei tudo ja ;P
mas lança a ediçao da revista, derrepente tenha isso nela..
vlw


GOSTEI 0
Logam

Logam

06/06/2007

Voce dice que ja desenvolveu tudo só falta uma rotina!!
Voce conhece o componente User Control??
Ele faz tudo isso que vc falou e precisa e muito mais tem varios recursos entre ele envio de mensagens internas entre os usuarios cadastrados no sistema envio de e-mail com a senha do usuario quando ele esquecer da mesma mediante confirmação é claro!!
e é compativel com varios bancos de dados diferentes
o site oficial é [url]www.usercontrol.net[/url]
e o componete é open source!!
vale a pena conhecer!!
apenas uma sugestão!!


GOSTEI 0
Paullsoftware

Paullsoftware

06/06/2007

valeu :D eu ja fiz todo o sistema de permissoes, cadastro de usuarios, controle de senhas, parte de liberação de seçoes por usuarios.. tudo apenas preciso de uma rotina q varra todo meu menu, e caso o nome dele for igual o da atual row do banco, ele deixe invisível. isto ai servira para usuarios q nao tem acesso a determinadas seçoes nao poderem se dar permissao em areas inacessiveis e nem cadastrar novos usuarios com mais nivel q ele.. bolei tudo ja ;P mas lança a ediçao da revista, derrepente tenha isso nela.. vlw

pronto ta ai os exemplos da Revista, foi a Edição 76.. controle de acesso com Emerson Valoco
https://www.devmedia.com.br/clubedelphi/downloads/Ed_76.htm

Voce dice que ja desenvolveu tudo só falta uma rotina!! Voce conhece o componente User Control?? Ele faz tudo isso que vc falou e precisa e muito mais tem varios recursos entre ele envio de mensagens internas entre os usuarios cadastrados no sistema envio de e-mail com a senha do usuario quando ele esquecer da mesma mediante confirmação é claro!! e é compativel com varios bancos de dados diferentes o site oficial é www.usercontrol.net e o componete é open source!! vale a pena conhecer!! apenas uma sugestão!!
é legal ter um componente pra fazer tudo isso que o UserControl faz, eu conheço ele já fiz alguns testes, mais não acho legal ter um componente que faça todo esse controle pra mim, o legal é usar a ideia dele e criar suas proprias regras, por exemplo... digamos que seu cliente está bastanten satisfeito e até acostumado com esse comonente já, daí ele diz pra vc... Programador, eu gostaria que o os usuários comuns n vissem o valor de custo do produtos e tb queria que apenas eu quando desse dois cliques em determinado Grid aparece isso ou aquilo, com vc fazendo o controle de acesso é bem mais simples de implementar isso não acha?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

06/06/2007

veja se essa rotina ajuda:
procedure TForm1.Bloqueia(Menu: TMainMenu);
var
  x: Integer;

  procedure BloqueiaItensMenu(Item: TMenuItem);
  var
    iItem: integer;
  begin
    for iItem := 0 to Item.Count-1 do
    begin
      Item[iItem].Visible := not DataBase.IBUsers.Locate(´Secao´, Item[iItem].Caption, [loCaseInsensitive]);

      // se um item estiver invisível, nem analiso os sub-itens
      if Item[iItem].Visible and (Item[iItem].Count > 0) then
        BloqueiaItensMenu(Item[iItem])
    end;
  end;
begin
  with DataBase.IBUsers do
  begin
    Close;
    SQL.Clear;
    SQL.Add(´select * from acessos where id_user=´ + QuotedStr(LOGIN_ID_USER));
    Open;

    // para melhorar a performance, não use (RecordCount = 0)
    // a menos que você precise saber o número exato de registros
    if not IsEmpty then
      for X := 0 to (Menu.Items.Count - 1) do
      begin
        Menu.Items[X].Visible := not Locate(´Secao´, Menu.Items[X].Caption, [loCaseInsensitive]);

        // se um item estiver invisível, nem analiso os sub-itens
        if Menu.Items[X].Visible and (Menu.Items[X].Count > 0) then
          BloqueiaItensMenu(Menu.Items[X]);
      end;
  end;
end;

note que agora deve ser passado o próprio menu como parâmetro da rotina Bloqueia.


GOSTEI 0
Martins

Martins

06/06/2007

Um bom código [b:2bf1f5be93]Emerson[/b:2bf1f5be93], uma busca recursiva resolve o problema.

Bons códigos!!


GOSTEI 0
Nightshade

Nightshade

06/06/2007

cara funciono perfeito
valeu [b:6a31007596]emerson.en[/b:6a31007596] :D


GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

06/06/2007

Qual versão é do Banco de Dados? Teria como fazer para MySql ou similar?
GOSTEI 0
Jose Maria

Jose Maria

06/06/2007

cara funciono perfeito
valeu [b:6a31007596]emerson.en[/b:6a31007596] :D


cara to precisando fazer um controle de permissoes...vc poderia me ajudar...?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

06/06/2007

Poderia me mandar um exemplo desse? Estou precisando fazer um Controle de Permissão também.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

06/06/2007

nightshade,

Teria como me ajudar a fazer esse Controle?
GOSTEI 0
POSTAR