Jump to content
dio123

acessos ao programa

Recommended Posts

dio123

estou a finalizar o meu programa para entregar a pap e queria fazer Niveis de acessos de utilizador para finalizar.

Queria saber se a forma que vou descrever em baixo é a melhor forma  para os niveis de acesso.

na bd tem terá vários utilizadores, com 3 acessos  admin,gerente,empregado

crio uma variável global,  que pode ser chamada em qualquer form.

depois ao fazer o login  passo informação para a variavel global  ex: acesso = textbox1.text   

Agora se abrir o registos_clientes e se user clicar para inserir um novo registo, e se não tiver acesso ficara uma coisa deste tipo.

button_inserir....

if acesso = admin then 
abre as funçoes do buttao inserir
else if acesso = empregado then 
msgbox("nao tem acesso para inserir dados")
end if 

Share this post


Link to post
Share on other sites
MSOlhao

Viva,

Em vez da variável global o melhor será utilizares um propriedade ReadOnly, podes fazer algo deste género

Public Enum AccessLevel
    Admin = 1
    Gerente
    Empregado
End Enum

Public Class AccessLayer

Private Shared _level As Integer = -1
Public Shared ReadOnly Property Level
    Get
        Return _level
    End Get
End Property

Public Sub New(ByVal ALevel As Integer)
    Select Case ALevel
        Case AccessLevel.Admin
            _level = AccessLevel.Admin
        Case AccessLevel.Gerente
            _level = AccessLevel.Gerente
        Case AccessLevel.Empregado
            _level = AccessLevel.Empregado
        Case Else
            _level = -1
    End Select
End Sub

Depois utilizavas assim:

Select Case AccessLayer.Level
    Case AccessLevel.Admin
        Console.WriteLine("Cargo: Administrador")
    Case AccessLevel.Gerente
        Console.WriteLine("Cargo: Gerente")
    Case AccessLevel.Empregado
        Console.WriteLine("Cargo: Empregado")
    Case Else
        Console.WriteLine("Invalido")
End Select

O enum parte do principio que tens uma tabela para os cargos e que o id é atribuído automaticamente e o 1 é o Admin.

Share this post


Link to post
Share on other sites
dio123

MSOlhao, podes explicar melhor como vou depois aplicar no programa?

A classe está criada, mas nao consigo fazer com que envie a informação para ser verificada.

O select case fica logo a seguir ao login do utilizador certo?

E que eu estou aprender vb.net e classes ainda esta muito fraco.

Share this post


Link to post
Share on other sites
MSOlhao

Não precisas de fazer o Select a seguir ao login, o Select que eu te dei como exemplo aplica-se quando queres efectuar alguma operação.

No login passas ao construtor da AccessLayer o tipo de utilizador que acabou de efectuou o login.

A tua query para verificares se esse utilizador existe é algo deste género:

SELECT id, nome, id_cargo FROM Utilizadores WHERE nome='José' AND PASSWORD='chave'

Presumindo que ele te devolve uma linha e guardas essa linha num SqlDataReader, passas ao construtor do AccessLayer isto:

Dim al As New AccessLayer(dr.Items("id_cargo"))

Passado o login com sucesso, aplicas o Select Case quando quiseres efectuar alguma operação que requer as permissões.

Para as BD eu imagino que tenhas algo assim:

Tabela Cargos

id_cargo INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY

cargo VARCHAR(35) NOT NULL

Tabela Utilizadores

id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY

id_cargo INTEGER NOT NULL

nome VARCHAR(50)

Edit: http://www.filesonic.com/file/291964851/AccessLayerSample.zip

Fiz este exemplo, vê lá se entendes melhor assim.

Share this post


Link to post
Share on other sites
dio123

muito obrigado MSOlhao,  já consegui. O problema era que o meu login nao utilizava ExecuteReader, usava  command.ExecuteScalar, por isso e que não estava  a conseguir.

Queria esclarecer  outra coisa.

Ex: gravar um registo cliente.

Quero saber se ainda há uma melhor forma para ficar mais organizado , como está em baixo

assim não fica aquele código grande no botão, e ponha todos os sub no final do programa

  Private Sub btn_guardar
  If dados_completo() = True Then
            MessageBox.Show("Prencha todos os campos", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
        ElseIf AccessLayer.Level = AccessLevel.Admin Then
            gravar_dados()
        End If
end sub

sub gravar_dados
codigo sql de gravar dados
end sub 
   

mais uma vez, obrigado MSOlhao

Share this post


Link to post
Share on other sites
MSOlhao

Viva,

Se te referes ao código que eu tenho no botão para fazer a consulta à base de dados, sim, existem formas mais simples e organizadas, podes fazer uma classe especifica para tratar de todas as operações com SQL, e depois chamar os métodos nos botões.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.