Desenvolvimento - C#

Controle de Usuários – Windows Forms C# (Parte 2)

Nesta segunda parte do nosso artigos criaremos as classes que trabalharão com os dados e criaremos também as views e procedure no BD.

por Fábio de Oliveira Santos



Olá a todos como estão? Espero que muito bem! Nesta segunda parte do artigo criaremos as VIEWS e PROCEDURES no BD e as classes do nosso controle de acesso.


VIEWS e PROCEDURES

Utilizaremos dos recursos do banco para que a aplicação seja o mais leve possível.

As VIEWS para não acessar diretamente as tabelas do banco através das nossas classes. Elas trarão as informações quando solicitarmos a localização ou edição de algum usuário.

A PROCEDURE será para realizar as gravações das permissões dos usuários. Assim queremos melhorar a velocidade do nosso controle de acesso.

Criaremos então as seguintes VIEWS:

· vw_ACUsuarios

· vw_EditACUsuarios

Elas ficarão da seguinte maneira:


--View que traz todos os dados da tabela Usuarios com o nome do perfil

CREATE view [dbo].[vw_ACUsuarios]

as

select u.Id, u.Nome, u.Usuario, p.Nome as Perfil, u.Email from AC_Usuario as u

inner join AC_Perfil as p on p.ID = u.IdPerfil

--Busca os dados do Usuario para a edição

create view [dbo].[vw_EditACUsuarios]

as

select u.Id, u.Nome, u.Usuario, u.Senha, p.Nome as Perfil,

u.Email from AC_Usuario as u

inner join AC_Perfil as p on p.ID = u.IdPerfil

Criaremos então a PROCEDURE:

· SP_MenuPerfil



Ficará da seguinte maneira:


--Insere ou Remove permissoes para um perfil

CREATE PROCEDURE [dbo].[SP_MenuPerfil]

@IdPerfil int,

@NomeMenu varchar(40),

@Op char(1)

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

SET NOCOUNT ON;

--Declaração variaveis

DECLARE @IdMenu int

DECLARE @AcessoMenu int

--Passa Valor para a variavel IdMenu pegando o ID do menu que esta no parametro

SET @IdMenu = (select Id from AC_Menu where NomeMenu = @NomeMenu)

--Verifica se a operação a ser realizada será a inserção ou deleção

IF @Op = "I"

begin

begin transaction

SET @AcessoMenu = (select IdMenu from AC_Menu_Perfil where IdMenu = @IdMenu and IdPerfil = @IdPerfil)

IF @AcessoMenu is null

begin

insert into AC_Menu_Perfil (IdPerfil, IdMenu) values (@IdPerfil, @IdMenu)

commit transaction

end

else

rollback transaction

end

ELSE IF @Op = "D"

begin

begin transaction

delete from AC_Menu_Perfil where IdPerfil = @IdPerfil and IdMenu = @IdMenu

commit transaction

end

END

Nesta PROCEDURE passamos três parâmetros sendo cada um deles explicados abaixo:

· @IdPerfil: Este parâmetro deverá conter o ID do perfil que se deseja modificar as opções de acesso;

· @NomeMenu: Deverá conter o nome do menu para seja localizado o seu ID e depois realizar a operação, esta foi a forma mais simples que encontrei de realizar esta operação;

· @Op: Este parâmetro indica a natureza da operação que será realizada, se será uma Inclusão ou Exclusão, sendo “I” para inclusão e “D” para exclusão. Este parâmetro deverá ser passado em maiúsculo.

Classes

Criaremos agora as classes que realizarão as operações no BD do nosso controle de acesso. Precisaremos das seguintes classes:




· cPerfil: Tratará das operações dos perfis, conterá as seguintes funções:

INCLUIR e EXCLUIR.

· cUsuarios: Tratará das operações dos usuários, conterá as seguintes funções:

INCLUIR, EXCLUIR e EDITAR.

· cMenus: Tratará das operações dos menus, conterá as seguintes funções:

INCLUIR, EXCLUIR e EDITAR.

· cAcesso: Tratará das operações dos acessos que um determinado perfil terá, conterá as seguintes funções:

INCLUIR e EXCLUIR.

Nas classes montaremos a nossa sentença SQL para a operação desejada.
As classes ficarão assim:

cPerfil


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace AcessControl.Class

{

class cPerfil

{

#region Atributos

private string descricao;

#endregion

#region Propriedades

public string Descricao

{

get { return descricao; }

set { descricao = value; }

}

#endregion

#region Funcoes

public void Incluir()

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("insert into AC_Perfil ");

strSQL.Append("(Nome) ");

strSQL.Append("values (");

strSQL.Append(""" + Descricao + "") ");

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

public void Excluir(int Id)

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("delete from AC_Perfil ");

strSQL.Append("where ID = " + Id);

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

public void Editar(int Id)

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("update AC_Perfil set ");

strSQL.Append("Nome = "" + Descricao + "" ");

strSQL.Append("where ID = " + Id);

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

#endregion

}

}

cUsuarios


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace AcessControl.Class

{

class cUsuarios

{

#region Atributos

private string nome;

private string usuario;

private string senha;

private int idperfil;

private string email;

#endregion

#region Propriedades

public string Nome

{

get { return nome; }

set { nome = value; }

}

public string Usuario

{

get { return usuario; }

set { usuario = value; }

}

public string Senha

{

get { return senha; }

set { senha = value; }

}

public int IdPerfil

{

get { return idperfil; }

set { idperfil = value; }

}

public string Email

{

get { return email; }

set { email = value; }

}

#endregion

#region Funcoes

public void Incluir()

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("insert into AC_Usuario ");

strSQL.Append("(Nome, Usuario, Senha, IdPerfil, Email) ");

strSQL.Append("values (");

strSQL.Append(""" + Nome + "", ");

strSQL.Append(""" + Usuario + "", ");

strSQL.Append(""" + Senha + "", ");

strSQL.Append(""" + IdPerfil + "", ");

strSQL.Append(""" + Email + "") ");

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

public void Excluir(int Id)

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("delete from AC_Usuario ");

strSQL.Append("where ID = " + Id);

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

public void Editar(int Id)

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("update AC_Usuario set ");

strSQL.Append("Nome = "" + Nome + "", ");

strSQL.Append("Usuario = "" + Usuario + "", ");

strSQL.Append("Senha = "" + Senha + "", ");

strSQL.Append("IdPerfil = "" + IdPerfil + "", ");

strSQL.Append("Email = "" + Email + "" ");

strSQL.Append("where ID = " + Id);

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

#endregion

}

}

cMenus


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace AcessControl.Class

{

class cMenus

{

#region Atributos

private string nomemenu;

private string captionmenu;

#endregion

#region Propriedades

public string NomeMenu

{

get { return nomemenu; }

set { nomemenu = value; }

}

public string CaptionMenu

{

get { return captionmenu; }

set { captionmenu = value; }

}

#endregion

#region Funcoes

public void Incluir()

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("insert into AC_Menu ");

strSQL.Append("(NomeMenu, CaptionMenu) ");

strSQL.Append("values (");

strSQL.Append(""" + NomeMenu + "", ");

strSQL.Append(""" + CaptionMenu + "") ");

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

public void Excluir(int Id)

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("delete from AC_Menu ");

strSQL.Append("where ID = " + Id);

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

public void Editar(int Id)

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("update AC_Menu set ");

strSQL.Append("NomeMenu = "" + NomeMenu + "", ");

strSQL.Append("CaptionMenu = "" + CaptionMenu + "" ");

strSQL.Append("where ID = " + Id);

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

#endregion

}

}


cAcesso


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace AcessControl.Class

{

class cAcesso

{

#region Atributos

private int idperfil;

private string nomemenu;

#endregion

#region Propriedades

public int IdPerfil

{

get { return idperfil; }

set { idperfil = value; }

}

public string NomeMenu

{

get { return nomemenu; }

set { nomemenu = value; }

}

#endregion

#region Funcoes

/// <summary>

/// Inclui o menu que o Perfil possui acesso

/// </summary>

public void Incluir()

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("EXEC SP_MenuPerfil ");

strSQL.Append("@IdPerfil = " + IdPerfil + ", ");

strSQL.Append("@NomeMenu = "" + NomeMenu + "", ");

strSQL.Append("@Op = "I"");

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

/// <summary>

/// Exclui o menu que o perfil possui acesso

/// </summary>

public void Excluir()

{

StringBuilder strSQL = new StringBuilder();

strSQL.Append("EXEC SP_MenuPerfil ");

strSQL.Append("@IdPerfil = " + IdPerfil + ", ");

strSQL.Append("@NomeMenu = "" + NomeMenu + "", ");

strSQL.Append("@Op = "D"");

DAL acesso = new DAL();

acesso.ExecutaComando(strSQL.ToString());

}

#endregion

}

}

Bom pessoal por hoje é só. No próximo artigo começaremos a criar nossas telas do controle de acesso.

Até lá abraço a todos.

Fábio de Oliveira Santos

Fábio de Oliveira Santos - Formando do curso de Sistemas de Informação pela UNIVALE. Trabalha na Teccom (Tecnologia em Comunicação de Dados) como analista de suporte. Atua também no desenvolvimento de aplicações win32 em C# e Delphi e web com ASP.NET.