public static bool ExigirIdentificação(IWin32Window owner, Permissão privilégios, Entidades.Pessoa.Pessoa autorizada, string título, string recurso, string descrição) { using (Login dlg = new Login()) { if ((Funcionário.FuncionárioAtual.Privilégios & privilégios) == privilégios) { // Usuário atual já tem permissão. Manda vê. return true; } if (!Funcionário.ÉFuncionário(autorizada)) { dlg.txtUsuário.Text = Funcionário.FuncionárioAtual.Usuário; dlg.txtUsuário.ReadOnly = true; } else dlg.txtUsuário.Text = ""; dlg.lblTítulo.Text = título ?? recurso; dlg.lblDescrição.Text = descrição; dlg.picÍcone.Image = Resource.cadeado_aberto; if (dlg.ShowDialog(owner) == DialogResult.OK) { Funcionário super; super = Funcionário.ObterFuncionárioPorUsuárioSemCache(dlg.txtUsuário.Text); if (super == null) { MessageBox.Show( owner, "Usuário desconhecido.", "Permissão negada", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } if ((super.Privilégios & privilégios) != privilégios) { MessageBox.Show( owner, "O usuário não possui privilégios suficientes para liberar o(s) recurso(s) requisitado(s).", "Permissão negada", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } try { using (IDbConnection conexão = Acesso.Comum.Usuários.UsuárioAtual.Usuários.Conectar(dlg.txtUsuário.Text, dlg.txtSenha.Text)) { conexão.Close(); } } catch { MessageBox.Show( owner, "Não foi possível autenticar usuário.", "Permissão negada", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } using (JustificarLiberaçãoRecursos justificativa = new JustificarLiberaçãoRecursos(autorizada, super.Nome, recurso)) { bool senhaIncorreta; do { senhaIncorreta = false; if (justificativa.ShowDialog(owner) != DialogResult.OK) return false; else if (justificativa.Senha != dlg.txtSenha.Text) { MessageBox.Show( owner, "Senha incorreta!", "Permissão negada", MessageBoxButtons.OK, MessageBoxIcon.Error); senhaIncorreta = true; } else { string strJustificativa; if (justificativa.Motivo.Trim().Length > 0) strJustificativa = "com a seguinte justificativa: \n\n" + justificativa.Motivo; else strJustificativa = "sem apresentar justificativa."; try { if (autorizada.Código != super.Código) { autorizada.RegistrarHistórico( string.Format("Recurso \"{0}\" autorizado por {1} {2}.", recurso, super.Nome, strJustificativa)); super.RegistrarHistórico( string.Format("Autorizou {0} o uso do recurso \"{1}\" {2}.", autorizada.Nome, recurso, strJustificativa)); } else autorizada.RegistrarHistórico( string.Format("Recurso \"{0}\" utilizado {1}.", recurso, strJustificativa)); } catch { MessageBox.Show( owner, "Não foi possível registrar no histórico a autorização.", "Permissão negada", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } } while (senhaIncorreta); } return true; } else return false; } }
/// <summary> /// Exige identificação de usuário. /// </summary> /// <param name="título">Título da janela.</param> /// <param name="descrição">Descrição da janela, instruindo o usuário.</param> /// <returns>Autorização concedida.</returns> public static bool ExigirIdentificação(IWin32Window owner, string título, string descrição) { using (Login dlg = new Login()) { dlg.txtUsuário.Text = Funcionário.FuncionárioAtual.Usuário; dlg.txtUsuário.ReadOnly = true; dlg.lblTítulo.Text = título; dlg.lblDescrição.Text = descrição; dlg.picÍcone.Image = Resource.cadeado_aberto; if (dlg.ShowDialog(owner) == DialogResult.OK) { Funcionário super; super = Funcionário.ObterFuncionárioPorUsuárioSemCache(dlg.txtUsuário.Text); if (super == null) { MessageBox.Show( owner, "Usuário desconhecido.", "Permissão negada", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } try { using (IDbConnection conexão = Acesso.Comum.Usuários.UsuárioAtual.Usuários.Conectar(dlg.txtUsuário.Text, dlg.txtSenha.Text)) { conexão.Close(); } } catch { MessageBox.Show( owner, "Não foi possível autenticar usuário.", "Permissão negada", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } return true; } else return false; } }
/// <summary> /// </summary> /// <returns>Falso se usuário cancelou</returns> public static bool EfetuarLogin(Usuários usuários, Splash splash) { #pragma warning disable 0162 #if DEBUG Usuários.UsuárioAtual = usuários.EfetuarLogin("andrep", "andrep"); return true; #endif bool conectado = false; // Constrói janela de login using (Login loginDlg = new Login()) { do { DialogResult resultado; if (splash != null) splash.Hide(); resultado = loginDlg.ShowDialog(); if (splash != null) splash.Show(); switch (resultado) { case DialogResult.OK: if (splash != null) splash.Mensagem = "Autenticando usuário"; try { Usuários.UsuárioAtual = usuários.EfetuarLogin(loginDlg.txtUsuário.Text, loginDlg.txtSenha.Text); if (Usuários.UsuárioAtual == null) MessageBox.Show("Senha ou usuário incorreto!", "Indústria Mineira de Joias", MessageBoxButtons.OK, MessageBoxIcon.Stop); else { conectado = true; } } catch (Exception e) { if (splash != null) splash.Mensagem = "Não foi possível autenticar usuário"; MessageBox.Show("Não foi possível autenticar usuário.\r\n\r\nOcorreu o seguinte erro: " + e.Message, "Indústria Mineira de Joias", MessageBoxButtons.OK, MessageBoxIcon.Error); } // Conectado! break; case DialogResult.Cancel: return false; default: break; } } while (!conectado); #if DEBUG Usuários.UsuárioAtual.GerenciadorConexões.ConexãoPresa += new GerenciadorConexões.ConexãoPresaCallback(GerenciadorConexões_ConexãoPresa); #endif return true; } #pragma warning restore 0162 }