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

frazato
Usuário Nível 3
Usuário Nível 3
Mensagens: 219
Registrado em: 08 Jul 2004 07:45

Usuários/senhas/acessos/etc

Mensagem por frazato »

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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usuários/senhas/acessos/etc

Mensagem por JoséQuintas »

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:

Código: Selecionar todos

   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:

Código: Selecionar todos

      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.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usuários/senhas/acessos/etc

Mensagem por JoséQuintas »

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.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usuários/senhas/acessos/etc

Mensagem por JoséQuintas »

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

Código: Selecionar todos

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.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

Usuários/senhas/acessos/etc

Mensagem por lwinter »

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 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

Usuários/senhas/acessos/etc

Mensagem por lwinter »

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?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usuários/senhas/acessos/etc

Mensagem por JoséQuintas »

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.
Editado pela última vez por JoséQuintas em 22 Jul 2019 18:33, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ quote ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r0
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

Usuários/senhas/acessos/etc

Mensagem por lwinter »

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

rgds,
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usuários/senhas/acessos/etc

Mensagem por JoséQuintas »

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/JoseQuin ... a_menu.prg

Configuração de acessos:

https://github.com/JoseQuintas/JoseQuin ... acesso.prg
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

Usuários/senhas/acessos/etc

Mensagem por lwinter »

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?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usuários/senhas/acessos/etc

Mensagem por JoséQuintas »

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.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usuários/senhas/acessos/etc

Mensagem por JoséQuintas »

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.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usuários/senhas/acessos/etc

Mensagem por JoséQuintas »

senhas.png
Continua praticamente a mesma, mas agora usando SQL.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder