Know-how

Know-how

Know-how




 

Administrar Permissão de Usuários

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

 

Downloads realizados: 395

 

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.

 

1999/2005 - CA-Clipper Website - Anderson Cardoso Silva
Downloads | Dicas | Know-how | Caça-Fantasmas | Impressoras | Erros do Clipper | Fórum | Aprenda Clipper! | Livro de Visitas |Contato
Numerabilis Folder | Numerabilis Website