🔥 Apps, books, system as a service, podcast and more



Montando Menu Dinâmico com Banco de Dados


    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: http://aspneti.com/Montando+Menu+Dinamico+com+Banco+de+Dados+944,0.aspx

    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.

Referência:
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.



Sign up to our newsletter

Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.

Top