Uma vez desenvolvi um método de senha para usuário. Cada usuário tinha acesso a determinada ação no sistema, dependendo do seu cargo na empresa. À pedidos, resolvi publicar o know-how.
Para que este esquema funcione, você tem que estar usando o método de compilação com .RMK e .LNK porque cada programa precisa ser uma função.
A idéia toda se baseia nas seguintes funções:
// atribuir permissões de usuários SETKEY(-21, {|cPRO,nLIN,cVAR| MU_PER(cPRO,nLIN,cVAR) } ) // Ctrl+F2 // consultar permissões de usuário FUNCTION PRG() cSECAO := PROCNAME(1) @ 24,69 SAY SPACE(10) COLOR "B/BG" // LINHA OPCIONAL @ 24,79-(LEN(cSECAO)) SAY cSECAO COLOR "B/BG" // LINHA OPCIONAL kIN := US->CARGO + cSECAO AC->( DBSEEK(kIN) ) RETURN (cSECAO)
A outra função é a MU_PER() que, por ser um pouco grande, está sendo fornecida no final da página e não listada.
Observe que o campo US->CARGO deve estar no seu arquivo de usuários, assim que o usuário entra no seu sistema ele digita o seu nome de usuário e senha, daí ele posiciona o registro no usuário corrente.
Veja um exemplo de arquivo de "usuários" e um arquivo de "cargos", abaixo:
*** USUARIOS - ELENCO DOS USUARIOS DO SISTEMA IF !FILE("USUARIOS.DBF") aDBF := {} aADD( aDBF, {"CODIGO", "C", 3, 0} ) // POSICAO 1 = CHAVE aADD( aDBF, {"USUARIO", "C", 15,0} ) // POSICAO 2 = RETORNO aADD( aDBF, {"NOME", "C", 35,0} ) aADD( aDBF, {"CARGO", "C", 3, 0} ) aADD( aDBF, {"IMPRESSORA","N", 2, 0} ) // IMPRESSORA Q ESTA USANDO aADD( aDBF, {"SENHA", "C",10, 0} ) aADD( aDBF, {"SIGN", "N", 3, 0} ) aADD( aDBF, {"LAST_USER", "C", 3, 0} ) DBCREATE("USUARIOS", aDBF) // ABRE DBF USE USUARIOS ALIAS US EXCLUSIVE NEW INDEX ON CODIGO TAG CODIGO TO USUARIOS SET INDEX TO USUARIOS // DEFINE USUARIO MESTRE = "SUPERVISOR" US->( DBAPPEND()) US->USUARIO = "SUPERVISOR" US->SENHA = CRIPT("1111111111", "USUARIOS") TSTSENHA = CRIPT("1111111111", "USUARIOS") TSTSENHA = DESCRIPT(US->SENHA, "USUARIOS") US->CARGO = "001" // SUPERVISOR ACESSO(US->CARGO, .T.) // ATRIBUI ACESSO TOTAL AO SISTEMA IF !FILE("CARGOS.DBF") aDBF := {} aADD( aDBF, {"CODIGO", "C", 3,0} ) // POSICAO 1 = CHAVE aADD( aDBF, {"CARGO", "C", 20,0} ) // POSICAO 2 = RETORNO -nome do cargo aADD( aDBF, {"SIGN", "N", 3,0} ) aADD( aDBF, {"LAST_USER", "C", 3,0} ) DBCREATE("CARGOS", aDBF) // ABRE DBF USE CARGOS ALIAS CA EXCLUSIVE NEW INDEX ON CODIGO TAG CODIGO TO CARGOS SET INDEX TO CARGOS CA->( DBAPPEND()) CA->CODIGO := "001" CA->CARGO := "SUPERVISOR" CA->( DBUNLOCK()) CA->( DBCOMMIT()) CA->( DBCLOSEAREA() ) ENDIF ENDIF
A seguir a estrutura do arquivo que irá tratar as permissões dos usuários e irá trabalhar com a nossa função:
*** ACESSO - PERMISSAO DOS USUARIOS IF !FILE("ACESSO.DBF") aDBF := {} aADD( aDBF, {"CODIGO", "C", 3,0} ) // CODIGO DO CARGO DO USUARIO aADD( aDBF, {"SECAO", "C",10,0} ) // SECAO DO SISTEMA aADD( aDBF, {"ACESSAR", "L", 1,0} ) aADD( aDBF, {"INSERIR", "L", 1,0} ) aADD( aDBF, {"ALTERAR", "L", 1,0} ) aADD( aDBF, {"EXCLUIR", "L", 1,0} ) aADD( aDBF, {"IMPRIMIR", "L", 1,0} ) aADD( aDBF, {"SIGN", "N", 3,0} ) aADD( aDBF, {"LAST_USER", "C", 3,0} ) DBCREATE("ACESSO", aDBF) USE ACESSO ALIAS AC EXCLUSIVE NEW INDEX ON CODIGO+SECAO TAG CODACE TO ACESSO AC->( DBCLOSEAREA() ) ENDIF
Doravante, basta colocar a seguinte linha no início de cada programa:
pATUAL := PRG()
...e antes de qualquer ação do sistema, teste a permissão do usuário:
IF !AC->EXCLUIR //Testa se o usuário pode excluir o registro MSGBOX1("Negado", "Permissão de Exclusão") RETURN ENDIF
Muito bem, agora você deve estar se perguntando: ...mas, como eu vou fazer para definir as permissões? Onde vou atribuir qual tipo de acesso cada usuário vai poder ter em cada programa???
Bem, como já dito, só o supervisor poderá atribuir acessos ao sistema, então primeiro passo: o usuário SUPERVISOR entra e visita cada programa e tecla CTRL + F2, aí é aberta uma janela com todos os cargos e permissões para você definir.
Insira a linha a seguir no programa principal do seu sistema:
SETKEY(-21, {|cPRO,nLIN,cVAR| MU_PER(cPRO,nLIN,cVAR) } ) // Ctrl+F2
A função MU_PER() irá atribuir as permissões dos usuários.
A seguir, estou disponibilizando alguns fontes que usei no meu sistema de contabilidade que nunca terminei... hehehe. Só os fontes que interessa aqui, ok?! Estes fontes usam a VL2 (Visual Lib 2 -Disponível na página de Downloads).
Permissão de Usuários: Só informação:
Pressionando CTRL+F2 na manutenção de empresas, abre a janela de permissão de acesso dos usuários:
A coluna "grupo" fica congelada e as demais colunas "rolam" para esquerda e direita. Em nosso exemplo temos: Acessar, Inserir, Alterar, Excluir e Imprimir. Onde tem "ü" permite, onde tem "X" proíbe acesso.
Outras telas dos PRGs fornecidos, observe os nomes deles no canto inferior direito da tela.
Essas janelas a de cima e a de baixo foi feita com o TBrowse com a função NAVEGAR() que escrevi.
Comentários recentes