Clipper On Line • Ver Tópico - Usuários/senhas/acessos/etc

Usuários/senhas/acessos/etc

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Usuários/senhas/acessos/etc

Mensagempor frazato » 15 Jul 2015 12:01

Tenho uma rotina montada, quase que neste molde mais usando DBF!, feito em GTWVW com xharbour 99.70..
Anexos
tela menu1.png
tela menu2 configuracao.png
frazato
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 170
Data de registro: 08 Jul 2004 07:45
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

Usuários/senhas/acessos/etc

Mensagempor JoséQuintas » 16 Jul 2015 20:13

Um Treeview com opção de expandir cada opção do menu.
Realmente ficaria interessante.

Atualizei de leve, e acrescentei pra ver os grupos de um usuário.

Só a título de curiosidade ou talvez de exemplo.

acessos.png


Nessa imagem, tem o primeiro conjunto de opções com nome do usuário.
Depois tem mais três menus por cima.
Esses três vém daquele array do menu.

Reparem que a rotina é "feita a mão", usando FOR/NEXT pra montar o menu, e InKey(0) pro usuário teclar algo.
A rotina completa, sem limite de níveis, é esta, que só precisa do array com o menu:

   BoxAcesso( 4, 15, axMenu, 1, "ACESSOS DE " + cUsuario + " (PRÓPRIO/GRUPO)", .F. )
...

FUNCTION BoxAcesso( mLini, mColi, mMenuOpt, mOpc, mTitulo, mSaiSetas, lLiberado4, lLiberado5 )
   LOCAL mCont, mLinf, mColf, mTecla
   mLinf := mLini + Len( mMenuOpt ) + 2
   mColf := mColi + 44
   WOpen( mLini, mColi, mLinf, mColf, mTitulo )
   Mensagem( "Selecione e tecle ENTER, <S> (Tem Acesso), <N> (Sem Acesso), <ESC> sai" )
   DO WHILE .T.
      FOR mCont = 1 TO Len( mMenuOpt )
         @ mLini + 1 + mCont, mColi + 1 SAY " " + Pad( mMenuOpt[ mCont, 1 ], 31 ) + iif( Len( mMenuOpt[ mCont, 2 ] ) > 0, Chr(16), " " ) + " " + ;
         iif( mMenuOpt[ mCont, 4 ], "SIM", "---" ) + " " + iif( mMenuOpt[ mCont, 5 ], "SIM", "---" ) + " " COLOR iif( mCont == mOpc, SetColorFocus(), SetColorBox() )
      NEXT
      SetColor( SetColorNormal() )
      mTecla := Inkey(0)
      DO CASE
      CASE mTecla == K_ESC
         EXIT
      CASE mSaiSetas .AND. ( mTecla == K_RIGHT .OR. mTecla == Asc( "6" ) .OR. mTecla == K_LEFT .OR. mTecla == Asc( "4" ) ) // setas
         EXIT
      CASE mTecla == K_LBUTTONDOWN
         IF MROW() > mLini + 1 .AND. MROW() < mLini + 2 + Len( mMenuOpt ) .AND. MCOL() > mColi .AND. MCOL() < mColi + 38
            mOpc := MROW() - mLini - 1
            Keyboard Chr( K_ENTER )
         ENDIF
      CASE mTecla == K_RBUTTONDOWN                           ; Keyboard Chr( K_ESC )
      CASE mTecla == K_DOWN     .OR. mTecla == Asc( "2" )    ; mOpc := iif( mOpc == Len( mMenuOpt ), 1, mOpc + 1 )
      CASE mTecla == K_UP       .OR. mTecla == Asc( "8" )    ; mOpc := iif( mOpc == 1, Len( mMenuOpt ), mOpc - 1 )
      CASE mTecla == K_HOME     .OR. mTecla == Asc( "7" )    ; mOpc := 1
      CASE mTecla == K_END      .OR. mTecla == Asc( "1" )    ; mOpc := Len( mMenuOpt )
      CASE mTecla == Asc( "S" ) .OR. mTecla == Asc( "s" )    ; // MudaAcess( mMenuOpt, mOpc, .T. )
      CASE mTecla == Asc( "N" ) .OR. mTecla == Asc( "n" )    ; // MudaAcess( mMenuOpt, mOpc, .F. )
      CASE mTecla == K_ENTER
         IF Len( mMenuOpt[ mOpc, 2 ] ) > 0
            BoxAcesso( mLini + 2, mColi + 10, mMenuOpt[ mOpc, 2 ], 1, mMenuOpt[ mOpc, 1 ], @mMenuOpt[ mOpc, 4 ], @mMenuOpt[ mOpc, 5 ] )
         ELSE
            // SelecionaUsuarios( mColi + 20, mMenuOpt[ mOpc, 3 ] )
         ENDIF
      ENDCASE
   ENDDO
   WClose()
   FOR mCont = 1 TO Len( mMenuOpt )
      IF mMenuOpt[ mCont, 4 ]
         lLiberado4 := .T.
      ENDIF
      IF mMenuOpt[ mCont, 5 ]
         lLiberado5 := .T.
      ENDIF
   NEXT
   RETURN NIL


Rotinas externas:
- wOpen() e wClose() - apenas pra montar o box (contorno) da opção e salvar/restaurar tela.
- Mensagem() e SetColorNormal() - o nome diz tudo
- MudaAcess() e SelecionaUsuarios() já fazem parte de configuração, e não deste menu

Toda navegação é essa rotina, incluindo uso de mouse.

E ao teclar numa opção com subopções:
      CASE mTecla == K_ENTER
         IF Len( mMenuOpt[ mOpc, 2 ] ) > 0
            BoxAcesso( mLini + 2, mColi + 10, mMenuOpt[ mOpc, 2 ], 1, mMenuOpt[ mOpc, 1 ], @mMenuOpt[ mOpc, 4 ], @mMenuOpt[ mOpc, 5 ] )
         ELSE
            // SelecionaUsuarios( mColi + 20, mMenuOpt[ mOpc, 3 ] )
         ENDIF


Ela chama ela mesma, passando o "sub-array".

Conforme a configuração vai sendo feita, o próprio array armazena o resultado.

Acho que ficou visível o que precisei fazer pra acrescentar a parte de grupos.
Só acrescentei um elemento ao array.

Rotina sem classes, sem nada sofisticado, apenas comandos/funções simples.
O uso de recursividade é que fez a diferença.
Um ótimo exemplo pra mostrar a vantagem de variáveis LOCAL.
Se usasse variáveis PRIVATE ou PUBLIC, sem chance.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11986
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 765 vezes

Usuários/senhas/acessos/etc

Mensagempor JoséQuintas » 16 Jul 2015 20:20

Frazato, deixei passar a sua mensagem.
Em DBF só é interessante se der a opção para o usuário organizar o menu do jeito que quiser.
No meu caso é fixo. só altera apenas o que pode ser visto.

Esse recurso de imagem de fundo é uma coisa que eu gostaria que tivesse na GTWVG.

Frazato:
Na mensagem da tela de configuração está HABILTAR.
Não sei se já corrigiu.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11986
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 765 vezes

Usuários/senhas/acessos/etc

Mensagempor JoséQuintas » 28 Jul 2015 15:55

E não é que deu trabalho achar um erro nessa rotina.
Exatamente essa rotina que postei.

FUNCTION BoxAcesso( mLini, mColi, mMenuOpt, mOpc, mTitulo, mSaiSetas, lLiberado4, lLiberado5 )

BoxAcesso( mLini + 2, mColi + 10, mMenuOpt[ mOpc, 2 ], 1, mMenuOpt[ mOpc, 1 ], @mMenuOpt[ mOpc, 4 ], @mMenuOpt[ mOpc, 5 ] )



Quando não é o primeiro dos menus, tem a opção de sair pela seta: esse parâmetro mSaiSetas
Esqueci dele nessa chamada recursiva quando acrescentei grupos, e acabava mostrando errado na opção com subopções.
A sorte é que isso é usado só pro visual, então não comprometeu a configuração, que é pelo nome de módulos.

Também tive problema porque isolei a rotina de pegar grupos do usuário.
É que esqueci de retornar à área anterior (SELECT nAreaAnt) nessa rotina.
E como na minha senha pula tudo que é checagem... isso aconteceu no cliente.

Aqui também acontecem erros, não sou diferente de ninguém.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11986
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 765 vezes

Usuários/senhas/acessos/etc

Mensagempor lwinter » 21 Jul 2019 12:57

Oi Jose!
Parabéns pelo trabalho ficou muito bom.
Como este fórum é para dar sugestões, segue a minha:
Acho interessante que a senha pudesse ser de pois fatores (por email já seria interessante e SMS seria um plus), onde o usuário poderia recuperar a sua senha e digitar um código. Desta forma evita suporte desnecessário.
Outro ponto é que depois que você introduzir o grupo, o acesso indivual em concomitância com o grupo se tornaria redundante. Lembrando que o usuário poderia ter vários grupos que acumulariam acessos. Mas o usuário especificamente poderia retirar ou adicionar acessos indivisuais (apos acesso do grupo).
Não sei se consegui explicar.

Uma duvida onde fica gracado estas opções do usuário? Como é o banco de dados?
lwinter
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 59
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 11 vezes

Usuários/senhas/acessos/etc

Mensagempor lwinter » 21 Jul 2019 13:14

Oi Jose! Pelo que eu entendi você tem os seus fontes disponibilizados em open source. É isso mesmo?
Eu estava pensando em criar um pequeno ERP (mini) em opensource. O que você acha?
lwinter
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 59
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 11 vezes

Usuários/senhas/acessos/etc

Mensagempor JoséQuintas » 21 Jul 2019 14:13

lwinter escreveu:Oi Jose! Pelo que eu entendi você tem os seus fontes disponibilizados em open source. É isso mesmo?


Na prática, dividi os fontes do meu aplicativo em 3 partes:

- sefazclass, é público no GitHub
- josequintas, é público no GitHub
- e a parte particular

Preciso dessas 3 partes pra gerar meu aplicativo que é distribuído aos clientes.
Pelo mesmo motivo, "josequintas" acaba tendo que manter compatibilidade com o aplicativo.
Talvez até divida em mais partes, só pra reduzir a parte "diferente".

Eu estava pensando em criar um pequeno ERP (mini) em opensource. O que você acha?


Lá tem muitas rotinas prontas do meu ERP.

Mas cada um usa banco de dados diferente, tipo de acesso ao banco de dados, LIB visual diferente, acho que não vai ser fácil isso.

Aproveitando:
A parte de direitos de acesso que perguntou em outro post, e que mostrei aqui...
Tinha esquecido, mas é só compilar o teste que vai ver em funcionamento.
Nota de Moderação:
JoséQuintas: Mensagem editada para colocar a tag [ quote ]
Veja como utilizar esta tag: Clique aqui
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11986
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 765 vezes

Usuários/senhas/acessos/etc

Mensagempor lwinter » 22 Jul 2019 14:59

Não consegui encontrar o fonte do teste do menu em https://github.com/JoseQuintas/JoseQuintas
Seria outro repositório do GitHub?

rgds,
lwinter
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 59
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 11 vezes

Usuários/senhas/acessos/etc

Mensagempor JoséQuintas » 22 Jul 2019 18:38

Talvez precise dividir/organizar por "assunto", porque no momento tá tudo misturado.
Mesmo que o menu esteja num fonte, as chamadas estão por outro.

Menu

https://github.com/JoseQuintas/JoseQuintas/blob/master/source/jpa_menu.prg

Configuração de acessos:

https://github.com/JoseQuintas/JoseQuintas/blob/master/source/padminacesso.prg
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11986
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 765 vezes

Usuários/senhas/acessos/etc

Mensagempor lwinter » 24 Jul 2019 15:38

Não consegui entender como compiltar o test.prg que esta dentro de tests, pois ao compilar o test.hbp apresenta "cannot find -ljosequintas". Me parece ser a biblioteca. Como faco para compilar?
lwinter
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 59
Data de registro: 07 Mar 2011 12:08
Cidade/Estado: Campinas - SP
Curtiu: 1 vez
Mens.Curtidas: 11 vezes

Usuários/senhas/acessos/etc

Mensagempor JoséQuintas » 24 Jul 2019 17:20

Precisa indicar aonde estão os HBCs: da sefazclass e josequintas

Aqui simplifico colocando em \harbour\bin\hbmk.hbc
Assim posso usar em qualquer projeto diretamente.

libpaths=d:/cdrom/fontes/integra/sefazclass
libpaths=d:/cdrom/fontes/integra/josequintas
libpaths=d:/cdrom/fontes/integra/josequintas/bostaurus

se for indicar no hbp, coloque -LpathDoHBC

Isso indica aonde procurar o arquivo HBC, e o arquivo HBC já diz tudo que precisa pra linqueditar.

Importante: crie uma pasta para o EXE, e execute nessa pasta criada.
É porque vão ser criados os DBFs/CDXs, e assim fica centralizado numa pasta que poderá ser apagada depois.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11986
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 765 vezes

Usuários/senhas/acessos/etc

Mensagempor JoséQuintas » 24 Jul 2019 17:31

lwinter escreveu:Não consegui entender como compiltar o test.prg que esta dentro de tests, pois ao compilar o test.hbp apresenta "cannot find -ljosequintas".
Me parece ser a biblioteca.
Como faco para compilar?


Pera aí... compilou as LIBs antes de compilar o teste?

Vamos por partes:

crie o arquivo hbmk.hbc dentro da pasta harbour\bin.
Isso não vai mexer com seus projetos, apenas vai indicar aonde pode ser pesquisada alguma coisa.
Ajuste para o path de onde instalou as LIBs

---hbmk.hbc---
libpaths=path-de-sefazclass.hbc
libpaths=path-de-josequintas.hbc

vai na pasta de sefazclass:
hbmk2 sefazclass.hbp

vai na pasta de josequintas:
hbmk2 josequintas.hbp

vai na pasta do programa de teste:
hbmk2 test.hbp

Nota:
Pra quem usa HMG Extended ou fivewin ou XHarbour....
Essas LIBs poderiam ser assim também. Uma única linha e tudo pronto pra uso. PRA TODAS.
O XHarbour também... usando HBMK2.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 11986
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 765 vezes

Anterior



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Google [Bot] e 3 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
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro