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

Responder a