Clipper On Line • Ver Tópico - Esquema de acesso

Esquema de acesso

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Esquema de acesso

Mensagempor MARCELOG » 25 Abr 2007 14:12

Olá pessoal,
em meus sistemas utilizo um "esquema" de acesso/ autorizações por níveis.
Ao cadastrar o usuário que terá acesso ao sistema, define-se um nível para o mesmo.
Com base nesse nível, as ações são controladas. Ex:
Nível 1 - inclui
Nivel 2 - inclui e altera
Nivel 3 - inclui, altera e exclui
etc.
Mas agora quero implementar um ajuste fino. Definindo o que cada usuário pode fazer em cada cadastro/ rotina.
Minhas idéias nesse sentido vão desde a criação de campos para os diversos cadastros, até a utilização de único campo com string criptografada para definição de acesso/ autorização.
Mas a experiência conta muita.
E sei que muitos de vocês já utilizam esse procedimento.
Se alguém se "habilitar", gostaria de saber a sua opinião e experiência a respeito.
Desde já obrigado.

MarceloG
Avatar de usuário

MARCELOG
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 546
Data de registro: 15 Mar 2005 16:54
Cidade/Estado: Divinópolis/MG
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Mensagempor janio » 25 Abr 2007 15:56

Amigo,

Eu utilizo o sistema de acesso a CADA ITEM do MENU. No arquivo de USUÁRIO crio um CAMPO para cada item do menu do sistema. No cadastro de usuarios, defino se o usuário é SUPERVISOR (com acesso a TODO o sistema) ou se o usuário é OPERADOR (com acesso APENAS onde lhe for dado acesso).

Somente o usuário SUPERVISOR pode cadastrar outros usuários... dizer onde cada um pode entrar... cadastrar as impressoras... etc.

Com as funções da VISUAL LIB, esse método fica fácil, fácil. Veja:
///////////////////////////////////////////////
// Sub menu de CADASTROS

AddDownItem( mCONPAG, "&Cadastros Gerais"  ,, mCADPAG )
AddDownItem( mCONPAG, "&Movimento Diario"  ,, mLANPAG )
AddDownItem( mCONPAG, "&Relatorios Gerais" ,, mRELPAG )

AddDownItem( mCADPAG, "Cadastra &Fornecedores"                   ,, { || P17CCRE() } )
AddDownItem( mCADPAG, "Cadastra Tipo de &Documento"              ,, { || P16CTDC() } )
AddDownItem( mCADPAG, "Cadastra &Matriz e Filial"                ,, { || P17CEMP() } )
AddDownItem( mCADPAG, "Cadastra &Produto de Compra"              ,, { || P17CPRD() } )
AddDownItem( mCADPAG, "Cadastra Grupo de Produtos"               ,, { || S13CGPR() } )
AddDownItem( mCADPAG, "Cadastra Sub Grupo de Produtos"           ,, { || S13CSGP() } )

if( SENHA->TIPUSU = "S" .OR. SENHA->P17CCRE  = .T., SETDOWNITEM( mCADPAG, 01, .T. ), SETDOWNITEM( mCADPAG, 01, .F. ) )
if( SENHA->TIPUSU = "S" .OR. SENHA->P16CTDC  = .T., SETDOWNITEM( mCADPAG, 02, .T. ), SETDOWNITEM( mCADPAG, 02, .F. ) )
if( SENHA->TIPUSU = "S" .OR. SENHA->P16CTDC  = .T., SETDOWNITEM( mCADPAG, 02, .T. ), SETDOWNITEM( mCADPAG, 02, .F. ) )
if( SENHA->TIPUSU = "S" .OR. SENHA->P17CEMP  = .T., SETDOWNITEM( mCADPAG, 03, .T. ), SETDOWNITEM( mCADPAG, 03, .F. ) )
if( SENHA->TIPUSU = "S" .OR. SENHA->P17CPRD1 = .T., SETDOWNITEM( mCADPAG, 04, .T. ), SETDOWNITEM( mCADPAG, 04, .F. ) )
if( SENHA->TIPUSU = "S" .OR. SENHA->S13CGPR1 = .T., SETDOWNITEM( mCADPAG, 05, .T. ), SETDOWNITEM( mCADPAG, 05, .F. ) )
if( SENHA->TIPUSU = "S" .OR. SENHA->S13CSGP1 = .T., SETDOWNITEM( mCADPAG, 06, .T. ), SETDOWNITEM( mCADPAG, 06, .F. ) )


Um abraço,

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Mensagempor sygecom » 25 Abr 2007 16:52

Tche, faço que nem vc Janio....até acabei de postar pra um colega na seção do CLIPPER um exemplo...


Abraços
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7017
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 133 vezes

Mensagempor ERCS123 » 01 Ago 2007 21:03

Olá Janio, estou querendo melhorar meu controle de senhas. EU não tenho muita pratica na programacao, por isso, teria como voce me explicar com mais detalhes esse seu exemplo?
Obrigado

Ewerton
ERCS123
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 95
Data de registro: 28 Jul 2007 19:54
Cidade/Estado: franca
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor janio » 03 Ago 2007 09:19

Colega,

Acho que já está bem detalhado como uso... de qualquer maneira, vou tentar explicar de novo.

1-) Vc deve ter um DBF onde fique guardadas as informações sobre os usuário cadastrados para ter acesso ao seu sistema.

2-) Nesse DBF, dentre outros campos, vc tem NOME DO USUÁRIO, SENHA, TIPO DE USUÁRIO, etc..etc... e o nome do PRG (item do menu) que vc dará ou nao acesso ao usuário. Nesse campo vc gravará S (se tiver acesso) ou N (se não tiver acesso). Exemplo: Digamos que seu PRG de cadastro de CIDADES seja CADCID.PRG. Então, no DBF dos usuario crie também o campo CADCID. Se vc quiser dar acesso ao usuário JANIO, digamos, ao cadastro de CIDADES, vc deve gravar no campo CADCID "S". Se o usuário JANIO não deve ter acesso ao cadastro de cidades, grave no campo CADCID "N". Daí, usando a VISUAL LIB é só aplicar o esquema acima.

Relembrando:
/////////////////////////////////////////////// 
// Sub menu de CADASTROS

// menu de cadastro de cidades 'apontando' para o prg CADCID
AddDownItem( mCADPAG, "Cadastra Cidades" ,, { || CADCID() } )

// se USUÁRIO for SUPERVIDOR ou se USUÁRIO tiver "S" no CADCID, tem acesso
if( SENHA->TIPUSU = "S" .OR. SENHA->CADCID  = "S", SETDOWNITEM( mCADPAG, 01, .T. ), SETDOWNITEM( mCADPAG, 01, .F. ) )


é +ou- isso.

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Mensagempor sygecom » 03 Ago 2007 12:09

Colega ERCS123, vc esta usando a Visual Lib ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7017
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 133 vezes

Mensagempor MARCELOG » 03 Ago 2007 13:48

Depois de ver o esquema de acesso do mysql, modifiquei o esquema que utilizava.

Tô usando mysql, mas com dbf é a mesma coisa.

Crie um arquivo de nome USUARIO (ou outro) para armazenar as informações de usuário e senha.

Crie outro arquivo de nome ACESSO (ou outro) para armazenar o nome do usuário, recurso e permissão.

Também crie um índice com os campos usuario e recurso.

A senha do usuário, no arquivo USUARIO, deve ser criptografada.

Da mesma forma, todos os dados em ACESSO devem ser criptografados.

Use a função crypt(string,chave) para isso.

Considerando um usuário com o seguinte perfil temos:

nome:usuario
senha:teste

recurso:cliente
permissão:inserir, alterar, excluir

No processo de gravação dos dados nos arquivos, use:

USUARIO->nome:='usuario'
USUARIO->senha:=CRYPT('teste','minhachave')

ACESSO->usuario:=CRYPT('usuario','minhachave')
ACESSO->recurso:=CRYPT('cliente','minhachave')
ACESSO->permissao:=CRYPT('inserir,alterar,excluir','minhachave')

Para acessar o sistema, o operador deve digitar um nome e senha que, criptografada, deve estar gravada no arquivo ACESSO.

Para acessar o recurso 'cliente', partindo do pressuposto de que o nome do usuário está gravado numa variável public ou private, conforme o caso, basta testar a condição.

IF ACESSO->dbseek(CRYPT(cUsuario,'minhachave')+CRYPT('cliente','minhachave')))
lInserir:=IIF('insert' IN ACESSO->permissao,.t.,.f.)
lAlterar:=IIF('alterar' IN ACESSO->permissao,.t.,.f.)
lExcluir:=IIF('excluir' IN ACESSO->permissao,.t.,.f.)
ELSE
Alert('Usuario sem acesso')
Return
ENDIF

...

É mais ou menos isso.

MarceloG

Ps: como você vê, o controle é realizado em nível de função/ recurso e não em nivel de menu.
Contudo, dá prá adaptar perfeitamente.
Editado pela última vez por MARCELOG em 03 Ago 2007 15:00, num total de 1 vezes
Avatar de usuário

MARCELOG
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 546
Data de registro: 15 Mar 2005 16:54
Cidade/Estado: Divinópolis/MG
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Mensagempor MARCELOG » 03 Ago 2007 14:59

Digo,

IF ACESSO->(dbseek(CRYPT(cUsuario,'minhachave')+CRYPT('cliente','minhachave')))
lInserir:=IIF('insert' IN ACESSO->permissao,.t.,.f.)
lAlterar:=IIF('alterar' IN ACESSO->permissao,.t.,.f.)
lExcluir:=IIF('excluir' IN ACESSO->permissao,.t.,.f.)
ELSE
Alert('Usuario sem acesso')
Return
ENDIF
Avatar de usuário

MARCELOG
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 546
Data de registro: 15 Mar 2005 16:54
Cidade/Estado: Divinópolis/MG
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

Mensagempor dbsh » 04 Ago 2007 15:54

Boa Tarde, Marcelo
uso de forma similiar aos nossos colegas, utilizo um DBF com os Campos:
Usuario-Codigo do Operador
Supervisor-Quem cadastrou o operador
DataInicial-Data que foi cadastrado no sistema
DataFinal- Data Limite para utilizar o sistema
HoraInicial- Hora Inicial para utilizar o sistema
Horafinal - hora final para utilizar o sistema
Senha-Senha com ate 20 digitos
NivelDeAcessoMenu-Nivel de acesso nos menu, para cada opcao utilizo um BIT, para identificar se pode acessar aquela opção no menu
NivelDeAcessoCadastro- Nivel de Acesso nos cadastro
NivelDeAcessoFinanceiro- Nivel de Acesso no financeiro
NivelDeAcessoRelatorio- Nivel de Acesso nos relatorios

EX:
//cria a janela de opcao, valores 0 posiciona a janela automaticamente
#command @ <li>,<ci>,<lf>,<cf> MENU <m> [<h:HORIZONTAL>] [NIVEL <nivel>] ;
         [WHEN <w>[,<wh>]] [VALI <v>[,<vh>]] [COLOR <cor>] [OPCAO <op>] ;
         [JANELA [<jchar>] [,[<jcor>] [,<jsombra>] ]] ;
         [TITULO <tit> [,<tli>, <tci>] [TCOR <tcor>] ]=> ;

//cria as opcões, valores 0 posiciona a janela automaticamente em menu horizontal, vertical ignora
#command @ [<li>,<ci>] OPCAO <o>[,<oh>] [ACAO <a>] [NIVEL <nivel>] ;
         [WHEN <w>[,<wh>]] [VALI <v>[,<vh>]] TO <m>  =>;
         menuopadd(<m>, <li>, <ci>, <o>, <oh>, <{a}>, <{w}>, <wh>, <{v}>, <vh>, <nivel>)

//chama outra janela
#command @ [<li>,<ci>] OPCAO <o>[,<oh>] NEXT <a> [NIVEL <nivel>] ;
         [WHEN <w>[,<wh>]] [VALI <v>[,<vh>]] TO <m>  =>;
         menuopadd(<m>, <li>, <ci>, <o>, <oh>, <a>, <{w}>, <wh>, <{v}>, <vh>, <nivel>)

@ 2, 2, 2, 70 menu Principal nivel 1
@ 0, 0, 0, 0 menu CadProduto nivel 2

@ 0, 0 opcao "Cadastro" next CadProduto nivel 3 to Principal
@ 0, 0 opcao "Relatorio" acao RelProduto nivel 4 to principal

//janela grade
@ 0, 0, 0, 0 menu CadGrade nivel 14

//cadastro de produto
@ 0, 0 opcao "Produto" acao CadastroProduto() nivel 5 to CadProduto
@ 0, 0 opcao "Grupo" acao CadastroGrupo() nivel 6 to CadProduto
@ 0, 0 opcao "SubGrupo" acao CadastrosubGrupo() nivel 7 to CadProduto
@ 0, 0 opcao "Grade" acao CadastrosubGrupo() nivel 8 to CadProduto
@ 0, 0 opcao "Departamento" acao CadastroDepartamento() nivel 9 to CadProduto

@ 0, 0 opcao "Grade" acao CadastroGrade() nivel 10 to CadGrade
@ 0, 0 opcao "Familia" acao CadastroFamilia() nivel 11 to CadGRade
@ 0, 0 opcao "Tamanho" acao CadastroTamanho() nivel 12 to CadGrade
@ 0, 0 opcao "Cor" acao CadastroCor() nivel 13 to CadGrade
Avatar de usuário

dbsh
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 115
Data de registro: 14 Jul 2004 14:19
Cidade/Estado: ES
Curtiu: 2 vezes
Mens.Curtidas: 15 vezes

Mensagempor Stanis Luksys » 06 Ago 2007 23:42

Olá,

Eu sou mais a favor do controle por usuário. Este lance de níveis de acesso num acho legal. Mais facil criar uma tabela de usuários, ou um txt criptografado, que grava o nome e os direitos de cada um.

Faz uma rotina de login e declara as variaveis, por exemplo:

public direito_de_cadastrar_produto := .t.

Depois vai testando a variavel na hora que precisar. Assim os "níveis" ficam mais extensos, cada usuário tem sua particularidade.

Falou!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar de usuário

Stanis Luksys
Colaborador

Colaborador
 
Mensagens: 1329
Data de registro: 18 Jun 2005 03:04
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Esquema de acesso

Mensagempor Linguagemclipper » 03 Set 2020 12:21

Se eu entendí bem, tenho que ter uma lista de todas as funções/rotinas/programas que meu sistema possui e um campo para cada item dessa lista no DBF de acesso para criar um perfil de usuário, correto?
Perfil de usuário vai servir para um grupo de usuários. Se eu quiser criar um nível de acesso por usuário eu criaria um perfil exclusivo para esse usuário, correto?
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar de usuário

Linguagemclipper
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 214
Data de registro: 16 Abr 2016 17:33
Cidade/Estado: Maceió/AL
Curtiu: 38 vezes
Mens.Curtidas: 12 vezes

Esquema de acesso

Mensagempor Mario Mesquita » 03 Set 2020 15:14

Eu faço por usuário.

Mesmo esquema, níveis de 0 a 4. Pra mim, resolve satisfatoriamente.

Sds
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

Esquema de acesso

Mensagempor JoséQuintas » 03 Set 2020 19:48

Faço por usuário, por grupo, e um grupo ainda pode estar em outro grupo.
O trabalho é igual em todos os casos, obter a lista de acessos.

http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=16321&start=0&hilit=senhas+de+acesso

Infelizmente, como mexi em tudo depois do post, acabei desativando os fontes do github, pra evitar de aparecer alguma informação particular durante alterações, mas mesmo assim dá a idéia sobre como funciona.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18150
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro