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