none
Estou fazendo uma aplicação e preciso diferenciar o funcionário comum do administrador RRS feed

  • Pergunta

  • No meu banco de dados a unica coisa de diferencia um funcionário do admin é o campo admin, que recebe um bool. No código, quando eu faço o login uso um construtor de uma Window minha para passar o admin, se o campo admin for verdadeiro no banco, ou funcionário, se o campo admin for falso no banco.

    Ta mais ou menos assim

     if (funcionario.FazerLogin())
                    {
                        if (funcionario.Admin)
                        {
                            clsAdmin admin = new clsAdmin(funcionario);
                            wndMenu wndMenu = new wndMenu(funcionario);
                            wndMenu.Show();
                        }
                        else
                        {
                            wndMenu wndMenu = new wndMenu(funcionario);
                            wndMenu.Show();
                        }
                        Close();
                    }
                    else
                        MessageBox.Show("Login ou senha incorreto!", "Erro", MessageBoxButton.OK);

    Porém isso me parece muito errado, além de ser feio, como acham que devo fazer?


    quinta-feira, 5 de março de 2020 16:37

Todas as Respostas

  • Olá, 

    Tenho uma aplicação onde utilizo nível de acesso para saber o que o usuário poderá fazer ou não, não faço restrição nenhuma no login, mas sim dentro das aplicações o que poderá ver/executar de acordo com o nível.

    O que faço no login é apenas carregar uma variável estática com o nível de permissão do usuário.

    Na tabela usuários criei uma coluna com o nível de cada um, (0 a 5) onde 5 é desenvolvedor e 0 é trial, enfim.. 

                    comando = new MySqlCommand("SELECT senha, nivel FROM usuario WHERE nome = @Nome", conexao);
                    comando.Parameters.AddWithValue("@Nome", usuario.Nome);
                    MySqlDataReader leitor = comando.ExecuteReader(CommandBehavior.CloseConnection);
                    if (leitor.HasRows)
                        while (leitor.Read())
                        {
                            usuario.Senha = leitor["senha"].ToString();
                            Usuario.Nivel = Convert.ToInt32(leitor["nivel"]);
                        }
                    }
                    leitor.Dispose();
                    return usuario;

    a partir disso verifico a senha já recebo na variável estática o nível de acesso.

    e no Login fica só assim:

                Usuario usuario = new Usuario();
                ObterUsuario(usuario);
    
                if (txtSenha.Text == usuario.Senha)
                {
                    Thread nt = new Thread(FormSistema);
                    nt.SetApartmentState(ApartmentState.STA);
                    nt.Start();
    
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Senha ou Usuario errado, tente novamente!", "iUP - Controle de Acesso",MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

    Não sei se ajudou, mas acho pratico assim pq executa uma vez só, e da condições em qualquer parte do sistema restringir o que quer dar acesso ou não de acordo com o nível do usuário.

    att,

    Fracalossi

    domingo, 8 de março de 2020 16:16