/// <summary> /// Exporta um botão para o formulário. /// </summary> /// <param name="privilégios">Privilégios necessários.</param> /// <param name="texto">Texto do botão.</param> /// <param name="retornarÀPrimeira">Se deve retornar à primeira base inferior, quando clicado.</param> /// <param name="basesInferiores">Tipos que herdam de <c>BaseInferior</c>.</param> public ExporBotãoAttribute(Permissão privilégios, string texto, bool retornarÀPrimeira, params Type[] basesInferiores) { this.permissões = privilégios; this.texto = texto; this.bases = basesInferiores; this.retornarÀPrimeira = retornarÀPrimeira; }
/// <summary> /// Valida se usuário atual possui privilégios necessários /// utilizando cache. /// </summary> /// <param name="privilégio">Privilégios necessários.</param> /// <returns>Se o usuário atual possui os privilégios necessários.</returns> public static bool ValidarPermissão(Permissão privilégio) { try { if (privilégio != Permissão.Nenhuma) { Usuário usuário; Pessoa.Funcionário funcionário; usuário = Usuários.UsuárioAtual; funcionário = CacheDb.Instância.ObterEntidade(typeof(Pessoa.Funcionário), usuário.Nome) as Pessoa.Funcionário; if ((funcionário.Privilégios & privilégio) == 0) return false; } return true; } catch (Exception e) { try { Usuários.UsuárioAtual.RegistrarErro(e); } catch { } return false; } }
/// <summary> /// Valida se usuário atual possui privilégios necessários /// utilizando cache. /// </summary> /// <param name="privilégio">Privilégios necessários.</param> /// <exception cref="PermissãoNegada"> /// Levanta exceção caso funcionário /// não possua privilégios suficientes. /// </exception> public static void AssegurarPermissão(Permissão privilégio) { if (privilégio != Permissão.Nenhuma) { Usuário usuário; Pessoa.Funcionário funcionário; usuário = Usuários.UsuárioAtual; funcionário = CacheDb.Instância.ObterEntidade(typeof(Pessoa.Funcionário), usuário.Nome) as Pessoa.Funcionário; if ((funcionário.Privilégios & privilégio) != privilégio) throw new PermissãoNegada(funcionário); } }
public void SetPermissãoEdição(Control controle, Permissão valor) { hashEdição[controle] = valor; }
public void SetPermissãoVisualização(Control controle, Permissão valor) { hashVisualização[controle] = valor; }
/// <summary> /// Verifica os privilégios associados ao funcionário /// e atribui aqueles só para interface gráfica. /// </summary> private void AdequarPrivilégios() { if ((privilégios & (Permissão.ConsignadoDestravar | Permissão.ConsignadoRetorno | Permissão.ConsignadoSaída)) > 0) privilégios |= Permissão.Consignado; else privilégios &= ~Permissão.Consignado; if ((privilégios & (Permissão.VendasDestravar | Permissão.VendasEditar | Permissão.VendasLeitura)) > 0) privilégios |= Permissão.Vendas; else privilégios &= ~Permissão.Vendas; }
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; } }
public static bool LiberarRecurso(IWin32Window owner, Permissão privilégios, string recurso, string descrição) { if (PermissãoFuncionário.ValidarPermissão(privilégios)) return true; return ExigirIdentificação(owner, privilégios, Funcionário.FuncionárioAtual, null, recurso, descrição); }
/// <summary> /// Exporta um botão para o formulário. /// </summary> /// <param name="controlador">Tipo que herda de <c>ControladorBaseInferior</c>.</param> /// <param name="privilégios">Privilégios necessários.</param> /// <param name="imagem">Imagem do botão.</param> /// <param name="texto">Texto do botão.</param> /// <param name="retornarÀPrimeira">Se deve retornar à primeira base inferior, quando clicado.</param> /// <param name="basesInferiores">Tipos que herdam de <c>BaseInferior</c>.</param> public ExporBotãoAttribute(int ordenação, Type controlador, Permissão privilégios, string texto, bool retornarÀPrimeira, params Type[] basesInferiores) : this(privilégios, texto, retornarÀPrimeira, basesInferiores) { this.ordenação = ordenação; this.controlador = controlador; }