PERMISSOES DE USUARIOS EM PROGRAMAS DESENVOLVIDOS

USUARIO.EXCLUIDOS 03/10/2006 14:25:11
#175292
Pessoal, passa-se o seguinte:

Desenvolvi um programa com 'LogOn', e cada utilizador tem vários tipos de permissões.

ex: Admin - como utilizar o programa no seu todo
Consultar - Só pode consultar os dados
etc..

Eu estou fazendo qualquer coisa do genero:

verificar que tipo de acesso tem o utilizador:

 If utilizaor="Consultar" then
add.enable=false
apagar.enable=false
...


estão percebendo a ideia? Mas eu pergunto, será que não existe outro método, mais simples, mais profissional, que permita controlar melhor estes tipos de evento? fico à  espera das vossas opiniões.
GUTO 03/10/2006 14:32:15
#175294
USUARIO.EXCLUIDOS 03/10/2006 14:48:19
#175299
Tu pode, criar uma tabela de "ACESSIBILIDADE", onde tu teria um "nível de acesso" e uma interface. Toda vez q tu abrisse o sistema a partir do logon, tu verificaria qual o "nível de acesso" do usuário logado e a partir daí, através da acessibilidade, habilitar os menus do sistema, bem como em cada tela, a acessibilidade sobre as funções do sistema, incluri, alterar, excluir, consultar . . .

Qq dúvida . . . to na área !!

Charles
USUARIO.EXCLUIDOS 03/10/2006 15:05:42
#175308
Resposta escolhida
Então eu coloco simplesmente um IF em cada função do sistema verificando a permissão do usuário, criei uma function pra facilitar, +/- assim:

Public Function VerPermissao(ByVal Pedido As String) As Boolean
If Acesso = "ADM" Then
VerPermissao = True
Exit Function
End If
Select Case UCase(Pedido)
Case "CONSULTA"
VerPermissao = (Acesso = "CONSULTOR" Or Acesso = "DIRETOR")
Case "INSERIR"
VerPermissao = (Acesso = "DIRETOR")
...
End Select
End Function


Daí uso (numa inserção por exemplo):
If VerPermissao("INSERIR") Then
'Insere
End If


Além de bloquear alguns menus tb...flw
USUARIO.EXCLUIDOS 03/10/2006 15:22:23
#175318
ou no form_load()

If utilizaor="Consultar" then
xxEnabled = False
Else
xxEnabled = True
End if

On Error GoTo trataerro:
Dim i As Integer
Dim MSKTEMP As String
For i = 0 To me.Controls.Count - 1
If TypeOf me.Controls(i) Is TextBox Then
me.Controls(i).Enabled = xxEnabled
ElseIf TypeOf me.Controls(i) Is ComboBox Then
me.Controls(i).Enabled = xxEnabled
ElseIf TypeOf me.Controls(i) Is MaskEdBox Then
me.Controls(i).Enabled = xxEnabled
ElseIf TypeOf me.Controls(i) Is CheckBox Then
me.Controls(i).Enabled = xxEnabled
End If
Next i
Exit sub
'
trataerro:
MsgBox "Aconteceu o seguinte erro " & Err.Number
Exit Sub
USUARIO.EXCLUIDOS 03/10/2006 15:46:33
#175334
valeu companheiros, deu para ter muito por onde lhe pegar. valeu a todos

USUARIO.EXCLUIDOS 03/10/2006 15:50:43
#175337
Vc tbm pode criar uma tabela de acessos onde 1 signifca acesso e 0 nao.

Consultaria de acordo com a necessidade a tabela.
USUARIO.EXCLUIDOS 03/10/2006 15:51:11
#175338
Eu ainda acho que isto deveria ser controlado via base de dados. Por exemplo:

TBL_PERMISSOES Niveis 1 2 3 4 5
Nivel 5 = pode fazer tudo
Nivel 4 = subadministrador, pode fazer quase tudo
Nivel 3 = Gerente de operações, pode fazer e visualizar tudo
Nivel 2 = usuario, pode editar registros, alterar, não pode criar novos users
Nivel 1 = Somente leitura

Ae, na tela de logon, o cara deve informar o nome e a senha, e o proprio sistema(via consulta sql) verifica as permissoes

dele.

As permissoes são armazenadas em campos distintos, tipo:

ID_USUARIO NIVEL GRAVACAO EXCLUSAO ADICAO BACKUP e por aí vai...
01 5 SIM SIM SIM SIM

ID_USUARIO NIVEL GRAVACAO EXCLUSAO ADICAO BACKUP e por aí vai...
02 4 SIM SIM SIM SIM

ID_USUARIO NIVEL GRAVACAO EXCLUSAO ADICAO BACKUP e por aí vai...
03 3 SIM SIM SIM SIM

ID_USUARIO NIVEL GRAVACAO EXCLUSAO ADICAO BACKUP e por aí vai...
02 2 SIM SIM SIM NAO

ID_USUARIO NIVEL GRAVACAO EXCLUSAO ADICAO BACKUP e por aí vai...
01 1 NAO NAO NAO NAO

Nota:A variavel tipo boolean vai aparecer muitas vezes no sistema, porém é uma tecnica infalivel.
Mas você também pode criar vaiaveis do tipo byte e enumerá las de acordo com o tipo de acesso.

Dentro do sistema vc cria as subs para ativar ou desativar botoes, menus, funcoes, etc, de acordo com o nivel do

usuario.Inclusive elas devem ser chamadas logo apos a consulta sql que ira verificar as permissoes.

Exemplo:

Private sub Form_Load() 'no form login
call VerificaPermissoes 'faz a verificacao do usuario, onde o campo NIVEL(bd) deve ser atribuido a variavel Nivel

Select case Nivel 'a variavel nivel deve ser publica(tipo byte) em um modulo

case 5
Call Desbloqueiatudo 'total acesso, nivel administrador, chama a sub para desbloquear as tarefas

case 4
'aqui seguem as outras subs de desbloqueio do sistema


etc,etc

End select

O melhor de tudo é que esta regra pode ser reutilizada para outros sistemas.
Inclusive deve ser assim, generica para todos os fins.

Tópico encerrado , respostas não são mais permitidas