Valdir Eu acho que você poderia usar um componente para isso, mas para evitar ficar na mão de um desenvolvedor que pode simplesmente parar de dar manutenção a um componente que não é extremamente complexo, sugiro que você crie um padrão para sua aplicações, tipo:
Tabela Usuarios us_login varchar 10 us_nomecompleto varchar 40 us_funcao varchar 40 tabela permissoes pe_sequencial integer *** - PK (usar auto-incremento) us_login varchar 10 *** - FKclaro pe_rotina varchar 50 *** - nome da rotina do sistema pe_incluir pe_alterar pe_deletar pe_imprimir pe_processar varchar 3 com check para SIM ou NÃO Uma função que retorne um valor booleando com os seguintes parâmetros: Function Pode(username, rotina, operacao: String): Boolean begin if permissoes.locate('us_login;pe_rotina',vararrayof([username,rotina],[locaseInsensitive]) then begin if operacao = 'incluir' then Pode := permissoespe_podeincluir.asboolean; if operacao = 'alterar' then Pode := permissoespe_podealterar.asboolean; if operacao = 'deletar' then Pode := permissoespe_podedeletar.asboolean; if operacao = 'imprimir' then Pode := permissoespe_podeimprimir.asboolean; if operacao = 'processar' then Pode := permissoespe_podeprocessar.asboolean; end; end; No seu código, antes de incluir, alterar, etc, é só chamar a rotina e verificar se o usuário tem permissão para fazer o que intenciona... Espero que isso te ajude! Eu uso nos meus aplicativos uma estrutura muito similar, e funciona "just dandy". Só não pode esquecer de verificar as permissões. Sds Emanuel Coutinho __________________________________ Emanuel Coutinho Salvador-Ba-Brasil valdirdill escreveu: > > Olá, > > Estou fazendo um módulo para cadastro de operadores no sistema, onde > cada operador receberá níveis diferentes de poder para cada um dos > módulos que compõe o sistema. > > Entre outros campos, na tabela CadOperadores, existem os campos > CAD_CLIENTES, CAD_FORNECEDORES, VENDAS, LCTO_CAIXA e RELATORIOS. São > do tipo integer; > > A idéia é que no programa, haja uma interface para que, ao se > cadastrar um operador, possa se atribuir nível 1 ou nível 2 a cada um > dos campos acima. > > Estou desenvolvendo a interface da seguinte forma: coloquei dois > TlistBox. No primeiro, tem os seguintes "Items" inseridos: Cadastro > de Clientes, Cadastro de Fornecedores, Vendas de Produtos, > Lançamentos no Livro Caixa e Relatórios. O segundo não está em branco. > > Existem botões permitindo que cada uma desses "Items" possam ser > movidos do ListBox1 para o ListBox2 ou vice-versa. > > Ao clicar no botão "Gravar" deve haver uma rotina que verifique onde > está cada "Items". Se, por exemplo, "Lançamentos do Livro Caixa" > estiver no ListBox1, o campo LCTO_CAIXA da tabela CadOperadores := 1; > se estiver ListBox2, o campo LCTO_CAIXA da tabela CadOperadores := 2. > > A dúvida é: como fazer isso, ou seja, verificar onde cada "Items" > está e gravar o respectivo valor na tabela? > > Até o momento a única idéia que me veio, seria: > > For I := 0 to ListBox1.Items.Count-1 do > if ListBox1.Items[I] = 'Lançamentos do Livro Caixa" then > CDSOperadores.FieldByName('LCTO_CAIXA').asInteger := 1 > else > CDSOperadores.FieldByName('LCTO_CAIXA').asInteger := 2; > > Até que funcionaria, mas me parece um pouco trabalhoso demais. Será > que não há uma maneira mais simples de se fazer essa rotina. > Lembro que citei apenas 5 campos da tabela, mas na verdade são mais > 50 e também quero fazer 3 níveis. Aí seriam 3 TListBox. Fazer > esses "IFs" para cada campo e um for para cada TListBox? > > Qualquer dica ajuda. > Obrigado > Valdir Dill > >