Desenvolvimento - C#

Montando Menu Dinâmico com Banco de Dados - Parte 2

Olá pessoal, hoje gostaria de dar continuação sobre a maneira de montar o menu dinâmico com banco de dados. Lembrando que já foi publicado a primeira parte do artigo...

por Mauricio Junior



Olá pessoal, hoje gostaria de dar continuação sobre a maneira de montar o menu dinâmico com banco de dados. Lembrando que já foi publicado a primeira parte do artigo no link abaixo:

Link: Parte 1

No link acima, eu montei o banco de dados com os campos para melhor entendimento e falei da tabela objeto que seria usado para carregar o menu na tela. Hoje vou mostrar a criação das tabelas de vínculo e um pouco de codificação em C#.NET.

Gostaria de lembrar que, não vou mostrar a forma de conectar ao banco de dados, nem mesmo fazer o select para validar o usuário logado, isso porque estou partindo do pré-suposto que você sabe fazer isso. O objetivo é mostrar como carregar o menu vindo do banco de dados de acordo com o usuário logado no sistema. Qualquer dúvida sobre isso, conexão, select e tudo mais, pode entrar em contato pelo site que procurarei responder.

Conceitos básicos para entender o artigo:

Visual Studio .NET 2008

Linguagem: C#.NET

Plataforma: ASP.NET

Objeto de tela utilizado: ASP:MENU.

Para deixar bem explicado, o menu precisa ser carregado de acordo com o perfil do usuário depois que o mesmo entra com o usuário e senha. Dessa forma o sistema busca no banco de dados o perfil e com ele busca os dados no menu. Que no nosso caso é a tabela Objeto conforme a parte 1 do artigo.

Se o seu caso for apenas carregar o menu sem distinção de usuário, o caminho está fácil. Agora para você leitor que precisa carregar o menu de acordo com o grupo do usuário, é necessário criar mais algumas tabelas específicas.

Criando tabelas para vincular o perfil do usuário

A primeira tabela para gerar o perfil do usuário foi a Grupo.

Campos:

GrupoId (int) auto incremento

Nome (varchar(60) notnull

Na descrição do grupo, pode ser colocado como desejar. Na minha aplicação eu tenho: Administrador, Usuário, Leitor.

Depois de criar a tabela grupo, é necessário criar uma tabela chamada GrupoObjeto para vincular a tabela Objeto com a tabela Grupo.

Tabela: GrupoObjeto

Campos:

ObjetoId (int) notnull

GrupoId (int) notnull

O número do menu cadastrado é fica no campo ObjetoId e o número do grupo cadastro fica no campo GrupoId.

A próxima tabela para criar vínculo é a usuário grupo, ou seja, vincular o usuário cadastro ao grupo. Para isso criei a tabela chamada UsuarioGrupo.

Tabela: UsuarioGrupo

Campos:

UsuarioId (int) notnull

GrupoId (int) notnull

Depois de criar estas tabelas ficou simples fazer o select. Para facilitar, vou colocar o select abaixou para carregar o menu do usuário que acabou de logar no sistema.

Select que retorna o menu para o usuário

Select distinct Obj.*

From Objeto Obj

Inner join GrupoObjeto gob on obj.objetoId = gob.objetoId

Inner Join Grupo gru on gob.grupoId = gru.grupoId

Inner Join UsuarioGrupo ugp on ugp.grupoId = gru.grupoId

Where ugp.usuarioId=(NUMERO_DO_USUARIO_ID)

Order by obj.Ordem

Referência: select 1.1

Este select retorna o menu de acordo com o usuário logado e com ele basta construir o código para mostrar em tela.

Codificando

Neste capítulo, eu vou codificar o menu para ser mostrado em tela. Para facilitar, eu vou criar uma classe chamada Sessao que carrega todas as sessões do meu sistema, inclusive a sessão de menu.

Esta classe sessão só tem get e set. Referência: code 1.2

public static DataTable Menu

{

get

{

try

{

return (DataTable)HttpContext.Current.Session["Session:MENU"];

}

catch

{

return null;

}

}

set

{

HttpContext.Current.Session["Session:MENU"] = value;

}

}

public static decimal UsuarioId

{

get

{

try

{

return Conversion.ToDecimal(HttpContext.Current.Session["Session:USUARIOCOD"]);

}

catch

{

return 0;

}

}

set

{

HttpContext.Current.Session["Session:USUARIOCOD"] = value;

}

}

Referência: Code 1.2

Depois que o usuário entrar no sistema com usuário e senha, eu preciso buscar o menu e chamar o select 1.1. O retorno dela eu atribuo para a classe sessao atribuindo o menu. Referência Code 1.3.

Sessao.Menu = new ObjetoBRL().BuscaObjetosDoUsuario(Sessao.UsuarioId);

Referência: Code 1.3

Assim eu fico com a sessão menu preenchido para montar na tela. Bom, eu fico por aqui e na parte 3 eu mostro o resto da codificação. Espero que tenha entendido e gostado, qualquer dúvida pode entrar em contato pelo site.

Obs.: resolvi dividir em partes para não ficar muito grande este artigo.

Mauricio Junior

Mauricio Junior - Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; . Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna e sou editor do Linha de Código.
Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A.
Blog:
blog.mauriciojunior.org
Site pessoal: www.mauriciojunior.org