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 SantosOlá 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.