Login com Perfil de Acesso
07/10/2013
0
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; namespace SistemaBibliotecario { public partial class FrmLogin : Form { //responsavel pelo nivel de acesso public static string NivelAcesso; //responsavel por mostrar quem está conectado public static string usuarioConectado; //responsavel por mostrar a senha para o alerta. public static string senhaUsuario; public static string conexao; public FrmLogin() { InitializeComponent(); } private void FrmLogin_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Perfil' table. You can move, or remove it, as needed. this.perfilTableAdapter.Fill(this.bDBiblioteca2DataSet.Perfil); // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Funcionario' table. You can move, or remove it, as needed. this.funcionarioTableAdapter.Fill(this.bDBiblioteca2DataSet.Funcionario); } } private void BtnEntrar_Click(object sender, EventArgs e) { try { if ((textBox1.Text != "") && (textBox2.Text != "") && (cbxPerfil.Text != "")) { //string de conexao OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb"); //Responsavel pelo Comando Sql. conexao foi criado no inicio da tela. "select” tem os detalhes para conexao, nome da tb e as colunas OleDbCommand comando = new OleDbCommand("Select * From Funcionario Where Nome = @Nome and " + "Senha = @Senha and Perfil=@Perfil", conexao); //Parametrizar os codigos comando.Parameters.Add("@Nome ", OleDbType.VarChar).Value = textBox1.Text; comando.Parameters.Add("@Senha", OleDbType.VarChar).Value = textBox2.Text; comando.Parameters.Add("@Perfil", OleDbType.VarChar).Value = cbxPerfil.Text; //Abre a conexão e coloca reader para poder ler os dados conexao.Open(); OleDbDataReader reader = null; //lê as linhas de uma base de dados reader = comando.ExecuteReader(); //Se tiver coisa pra lê faça: if (reader.Read()) { //Variavel usuarioConectado foi criada no inicio da tela e recebe campo usuariotextBox.Text usuarioConectado = textBox1.Text; //Variavel nivelAcesso foi criado no inicio da tela e recebe o campo nivelAcessoComboBox.Text NivelAcesso = cbxPerfil.Text; //Variavel nivelAcesso foi criado no inicio da tela e recebe o campo Senha do Usuario.Text senhaUsuario = textBox2.Text; //Declara a variavel que recebe o formulario FrmPrinciapal FrmPrincipal frmp = new FrmPrincipal(); frmp.Show(); this.Hide(); } else { MessageBox.Show("Usuário ou Senha Inválido !", "Acesso", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox1.Clear(); textBox2.Clear(); textBox1.Focus(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Jair Souza
Post mais votado
22/10/2013
perfil = NivelAcesso;
Sendo que NivelAcesso nem aparece no trecho de código, então provavelmente você a declarou como pública e ela está vazia. Assim, mesmo após preencher a variável "perfil" com o conteúdo da coluna que vem do banco, você passa para essa variável um valor em branco. O correto seria fazer o contrário:
NivelAcesso = perfil ;
mas na prática nem precisa, pois você pode utilizar a própria variável "perfil" para passar o valor para a propriedade do FrmPrincipal:
frmp.NivelAcesso = perfil;
Joel Rodrigues
Mais Posts
21/10/2013
Jair Souza
22/10/2013
Jair Souza
No entanto não deixa enabled nunca, independente se for Usuário ou Administrador.
private void FrmPrincipal_Load(object sender, EventArgs e) { if (NivelAcesso != "Administrador") { BtnFuncionarios.Enabled = false; BtnFuncionarios.BackColor = Color.Red; MenuCadPerfil.Enabled = false; MenuCadPerfil.ForeColor = Color.Red; } }
22/10/2013
Joel Rodrigues
E como você definiu em tempo de design? Ou seja, no design está habilitado ou desabilitado?
22/10/2013
Jair Souza
Inicia Habilitado.
22/10/2013
Joel Rodrigues
22/10/2013
Jair Souza
*Em tempo de design inicia com as todas opções Habilitadas.
*Para Administrador que tem IDPerfil = 1, deve permanecer tudo Habilitado.
*Para Usuário que tem IDPerfil = 2, deve Desabilitar as duas opções.
E assim está o código agora :
Form Login : **Note que mudei para PUBLIC STATIC INT.
public static int NivelAcesso { get; set; } public static string usuarioConectado { get; set; } public static string senhaUsuario; public static string conexao; public FrmLogin() { InitializeComponent(); } private void FrmLogin_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Perfil' table. You can move, or remove it, as needed. this.perfilTableAdapter.Fill(this.bDBiblioteca2DataSet.Perfil); // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Funcionario' table. You can move, or remove it, as needed. this.funcionarioTableAdapter.Fill(this.bDBiblioteca2DataSet.Funcionario); } private void BtnEntrar_Click(object sender, EventArgs e) { try { if ((textBox1.Text != "") && (textBox2.Text != "")) { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb"); OleDbCommand comando = new OleDbCommand("Select * from Funcionario where Login = @LOgin and Senha = @Senha", conexao); comando.Parameters.Add("@Login ", OleDbType.VarChar).Value = textBox1.Text; comando.Parameters.Add("@Senha", OleDbType.VarChar).Value = textBox2.Text; conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(CommandBehavior.CloseConnection); if (reader.HasRows) while(reader.Read()) { NivelAcesso = Convert.ToInt32(reader["Perfil"].ToString()); usuarioConectado = textBox1.Text; senhaUsuario = textBox2.Text; FrmPrincipal frmp = new FrmPrincipal(); frmp.NivelAcesso = NivelAcesso; frmp.Show(); this.Hide();
Form Principal : **Note que mudei para PUBLIC STATIC INT
public int NivelAcesso; public FrmPrincipal() { InitializeComponent(); } private void FrmPrincipal_Load(object sender, EventArgs e) { if (NivelAcesso != 1) { BtnFuncionarios.Enabled = false; BtnFuncionarios.BackColor = Color.Red; MenuCadPerfil.Enabled = false; MenuCadPerfil.ForeColor = Color.Red; }
**Declarei "Nivel de acesso" como public string e depois como public int, pois me dei conta que agora se trata de numero e não texto, mas não muda nada, nunca desabilita as benditas opções...
***Independente do login as determinadas opções, Nunca ficam Desabilitadas.
23/10/2013
Joel Rodrigues
No FrmPrincipal, depure o código para verificar qual valor está sendo recebido pela variável NivelAcesso (se não souber depurar, exiba em um MessageBox).
23/10/2013
Jair Souza
E fiz o messagebox, o NivelAcesso carrega o valor correto do IDPerfil que é 1 para Administrador e 2 para Usuário, veja na imagem.
[url]http://uploaddeimagens.com.br/imagens/valor_do_nivelacesso-png[/url]
E fiz um messagebox no FrmPrincipal, o NivelAcesso é sempre "0" ...
25/10/2013
Jair Souza
Abaixo as tabelas em questão e o código atual :
Tabela Perfil
IDPerfil – Numeração Automática
Nome - Texto
Descricao - Texto
Tabela Funcionario
IDFuncionario
Nome
Login
Senha
Perfil ---Junção--- IDPerfil
Situacao
No FrmPrincipal :
private void FrmPrincipal_Shown(object sender, EventArgs e) { if (NivelAcesso != "Administrador")
No FrmLogin :
OleDbCommand comando = new OleDbCommand("SELECT F.Perfil, P.Descricao FROM Funcionario AS F "+" INNER JOIN Perfil AS P ON F.Perfil = P.IDPerfil Where F.Login = @Login And F.Senha = @Senha", conexao); comando.Parameters.Add("@Login ", OleDbType.VarChar).Value = textBox1.Text; comando.Parameters.Add("@Senha", OleDbType.VarChar).Value = textBox2.Text; conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(CommandBehavior.CloseConnection); if (reader.HasRows) while(reader.Read()) { NivelAcesso = reader["P.Descricao"].ToString(); usuarioConectado = textBox1.Text; senhaUsuario = textBox2.Text; FrmPrincipal frmp = new FrmPrincipal(); frmp.NivelAcesso = NivelAcesso; frmp.Show(); this.Hide(); }
25/10/2013
Joel Rodrigues
Na seguinte linha:
NivelAcesso = reader["P.Descricao"].ToString();
27/10/2013
Jair Souza
*No FrmLogin :
private void BtnEntrar_Click(object sender, EventArgs e) { try { if ((textBox1.Text != "") && (textBox2.Text != "")) { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb"); OleDbCommand comando = new OleDbCommand("SELECT F.Perfil, P.Descricao FROM Funcionario AS F " + " INNER JOIN Perfil AS P ON F.Perfil = P.IDPerfil Where F.Login = @Login And F.Senha = @Senha", conexao); comando.Parameters.Add("@Login ", OleDbType.VarChar).Value = textBox1.Text; comando.Parameters.Add("@Senha", OleDbType.VarChar).Value = textBox2.Text; conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(CommandBehavior.CloseConnection); if (reader.HasRows) while(reader.Read()) { NivelAcesso = (reader["Descricao"].ToString()); usuarioConectado = textBox1.Text; senhaUsuario = textBox2.Text; FrmPrincipal frmp = new FrmPrincipal(); frmp.NivelAcesso = Convert.ToString(NivelAcesso); frmp.Show(); this.Hide(); } else { MessageBox.Show("Usuário ou Senha Inválido !", "Acesso", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox1.Clear(); textBox2.Clear(); textBox1.Focus(); } reader.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
**No FrmPrincipal :
public string NivelAcesso; private void FrmPrincipal_Shown(object sender, EventArgs e) { if (NivelAcesso != "Administrador") { BtnFuncionarios.Enabled = false; MenuCadFuncionarios.Enabled = false; MenuCadPerfil.Enabled = false; } }
27/10/2013
Joel Rodrigues
Sempre que precisar, sinta-se à vontade para abrir novos tópicos.
Um abraço.
Estou conculindo o tópico.
Clique aqui para fazer login e interagir na Comunidade :)