PERMISSAO DE ACESSO DE TELAS PARA USUARIOS

JAMESBOND007 22/06/2010 13:45:29
#345475
Preciso de uma rotina em vb6 que faça o seguinte:
Meu aplicativo tera um administrador, e este, podera definir permissões de outros usuarios na tela de login.
txtlogin (user)
txtpass(***)
cmbnivel(ADMINISTRADOR)
Onde tivesse um exemplo de que se for administrador tem permissão total sobre os formularios e se for usuario alguns são restritos.
Gostaria de saber uma rotina ou um exemplo funcional para efetuar essa proeza...
Muito obrigado...
LUIS.HERRERA 22/06/2010 14:13:31
#345478
Resposta escolhida
Você tem duas saídas:
1- mais simples, criar variáveis públicas num módulo e ao iniciar seu login, carrega as permissões do usuário numa tabela (DB) com todas as permissões dele ex: Where IDFuncionário = xxx
Então faz um loop no recordset verificando qual permissão ele tem e coloca true na variável correspondente. Ao abrir a tela principal já associa os itens do menu as variáveis, então fica itemMenu1.enabled = variávelItem1

2- a cada carregamento de tela que fizer, vai no banco e procura só as permissões dessa tela e funconário.

Nota: A opção 1 acho melhor, pois memoria hoje todo micro tem, e não serão umas 20 ou 50 variáveis públicas que farão a diferença. Agora a opção 2, poderá sobrecarregar o fluxo na rede, pois sempre estará acessando o banco para pegar as permissões de cada tela/funcionário. Então se o programa tem muitas telas e acessos, poderá ter um grande fluxo na rede.

O inconveniente da primeira opção é que se houver alteração nas permissões o usuário só será afetado no próximo login.
JCARLOS 22/06/2010 14:25:16
#345481
Rapaz, eu tenho o seguinte:
Cadastro de usuarios, Cad. Sistema, Sistema_menu, SistemaUsuario
Usuarios: Dados do Usuário
Sistema: Informações sobre o sistema
Sistemas_Menu: Cadastra os nomes dos menus identicos ao definido no vb6 com seus níveis de deslocamento e codigo do Menu_Pai qdo ele for um sub_menu.
Sistema_Usuario: Codigo do sistema, codigo do usuário e nível de acesso ao sistema (Administrador, operador)
Usuario_Acesso: Usuario, sistema, codMenu, Pode acessar(sim/nao), Tipo de acesso(Consulta/Manutenção)
Vc pode cadastrar inclusive os menus de consultas e relatóros e dar permissão de acesso a cada um deles.
Qdo o usuário é administrador fica com permissão total a todos os menus.
No load do formMdi pu formMenu, vc faz a checagem se os menus vão ficar habilitados ou não dependendo se pode acessar ou não.
Lo load de cada form, vc checa se o acesso dele é de consulta ou de manutenção, se for de consulta, inabilita botoes de gravar/alterar/deletar.
A idéia está aí, agora é mão na massa.
Abraços.
JAMESBOND007 22/06/2010 14:33:50
#345482
Entendi e isso que eu quero vc poderia disponibilizar o codigo pra min?
JAMESBOND007 22/06/2010 16:02:06
#345495
Private Sub cmdAutenticar_Click()
Dim sql As String
sql = [Ô]select * from login where user=[ô][Ô] & txtuser.Text & [Ô][ô] and pass=[ô][Ô] & txtpass.Text & [Ô][ô][ô] and nivel=[ô][Ô] & cmbnivel.text & [Ô][ô][Ô]
Set login = conexao.Execute(sql)
If login.EOF Then
m = MsgBox([Ô]Usuário não encontrado, digite novamente[Ô], vbCritical, [Ô]Autenticação[Ô])
txtuser.Text = Empty
txtpass.Text = Empty
txtuser.SetFocus
Else
m = MsgBox([Ô]Usuário encontrado com sucesso[Ô], vbInformation, [Ô]Autenticação[Ô])
m = MsgBox([Ô]Carregando o sistema[Ô], vbInformation, [Ô]Autenticação[Ô])

Unload Me
MDIForm1.Show
End If
End Sub

Se cmbnivel for igual a gerente ele libera os forms pedidos, se for vendedor liberar os forms que são pedidos e etc.
como que eu iria fazer isso?
sendo que eu teria que buscar no bd se o cara e mesmo gerente se for igual ele deixa visivel os menus ou forms que ele tem permicao se nao for ele da a mensagem de que ele esta proibido de fazer aquilo.
LIZANDER 22/06/2010 19:01:30
#345529
James Bond...

O que eu faço é o seguinte:
Tenho as seguintes tabelas:
Funções - Esta tabela contém todas as funções (form) do sistema, identificadas por um ID (código).
Perfil - Uma tabela com os perfis de usuário criados pelo administrador do sistema
Permissões - Uma tabela que relaciona o perfil criado pelo adm com as funções(ID) que o determinado perfil tem acesso.
Usuários - cadastro do usuário, com senha e perfil atribuído.

Quando um usuário loga o sistema, verifico qual é o pefil, desabilito todas os acessos, vou até o permissões e busco função a função se o mesmo está liberado para o perfil do usuário logado. Se estiver, enabled = true.

Isso facilita quando um usuário mudar de função, basta o adm trocar o perfil do mesmo para que ele tenha outras liberações no sistema. Ou caso um grupo de usuários de mesmo perfil tenha uma nova função no sistema, basta o adm liberar no perfil.

Funciona 100%.


ARNALDOCRUZ 22/06/2010 19:44:05
#345531
Cara eu fiz assim

criei uma tabela permissões

IDUser Int
Permi Varchar(500)

em um formulário coloquei um triview

para cadaopção do menu criei um nó

Cadastro
Fornecedor
Cliente

Contas a Pagar
Consultar
Lançar
Pagar
Contas a Receber
Baixar
Consultar
Lançar

Quado um usuario é cadastrado eu Preencho a tabela permissões

IDUser = 1
Permi 01N02N03N04N05N06N07N08N

01N SIGNIGFICA QUE NÃO TERÁ ACESSO A CADASTRO
02n SIGNIFICA QUE NÃO PODERÁ CADASTRAR FORNECEDOR

o ADMINISTRADOR APÓS CADASTRAR O USUARIO ABRE A TELA DE PERMISSÕES, SELECIONA O USUÁRIO E MARCA AS PERMISSÕES, APÓS SALVAR

Permi 01s02s03s04s05s06s07s08s

Ao iniciar o sistema abro a tabela e faço um loop
e vou habilitando as opções que estejam com S.

Isso é só para liberar a tela ou não, caso vc queira permitir ou não inclusão,alteração,exclusão basta adicionar no triview + opções.


esse metodo tem algumas vantagens e também tem desvantagem

vantagem

nenhum usuário abrindo o BD irá saber o que habilita quem.

Desvantagem

se precisar acrescentar ou excluir alguma opção do menu o trabaho é enorme, a não ser que vc coloque as opções do menu em uma tabela.






NLSOLUCOES 22/06/2010 20:06:51
#345537
>
é ARNALDOCRUZ, o meu é um pouco parecido com o seu mas tem 4 check-box para cada form, Consultar, Alterar, Excluir, Imprimir.

E tbém entro na mesma desvantagem, tenho que cadastrar no BD cada novo form, relatório o seilá o que.
Mas ainda acho bom.
<
JAMESBOND007 23/06/2010 11:58:10
#345577
Como eu teria que alterar aquilo no meu botao [ô]cmdAutenticar[ô]
JAMESBOND007 24/06/2010 08:08:09
#345644
Alguem???
LIZANDER 24/06/2010 19:25:59
#345731
Alterar o que James?

Foram expostos modelos de liberações por usuário... Depende de como vc vai fazer.

No seu caso, depois de Unload Me e antes de MDIForm1.Show (ou dentro de, se este form for o que tem o menu de opções), você irá liberar ou não as opções para o usuário logado.

Mas para isso, vc terá que fazer um modelo de liberações, vc já o fez? A única coisa q vc postou foi o código de um botão de login... Como isso vai se processar no seu sistema, depende da estrutura que vc tem (ou vai criar)...
Tópico encerrado , respostas não são mais permitidas