Array
(
)

Carregamento dinâmico de menu - Qual a melhor forma de ser fazer?

Thomás Moreira
   - 13 mar 2013

Boa tarde amigos!
Preciso preparar minha aplicação para controlar as permissões de acesso dos usuários.
Inicialmente pensei em cadastrar no banco de dados toda a árvore de menus (e suas respectivas páginas) e dar as devidas permissões em cada item de menu para cada usuário. No momento em que o usuário se logar no sistema, eu carregaria o menu para ele, de acordo com as permissões e instanciaria na minha aplicação.
Minha grande dúvida é com relação à eficácia desse processo, principalmente com relação à velocidade e ao desempenho.
Nas minhas pesquisas, já me deparei com dois cenários:
1. O menu é carregado a partir do banco de dados e é armazenado na sessão do usuário.
2. O menu é carregado a partir do banco de dados e é usado um arquivo XML para armazena-lo.
Qual das duas opções seria a melhor? É claro que ambas tem pontos positivos e negativos, mas creio que deva haver algo de senso comum para essa situação, levando em conta trafego de rede, acesso a banco, alocação de memoria, etc, etc, etc.
Alguem poderia indicar alguma outra alternativa para resolver a questão?
Desde ja agradeço muito a ajuda de todos!

Thomás Moreira
   - 14 mar 2013

Alguém ai pra ajudar??

Robson Robsonalves.net
   - 14 mar 2013

Thomas vc já sabe o que fazer.

A melhor opção existirá para cada tipo de projeto.

Seu meu exige ser dinâmico? O quão dinâmico ele será?
O usuário irá manipular a ordem e a nova estrutura do menu.

O fato de ler as informações do banco de dados não torna o processo lento.

Tudo depende das interações que serão feitas no menu, pois com certeza, não vai faltar for e if.

Thomás Moreira
   - 14 mar 2013

Caro Robson, obrigado pela resposta.

Talvez não tenha sido claro o bastante. Vou tentar explicar melhor.

A ideia de fazer um menu dinâmico é facilitar e centralizar o gerenciamento de permissões de acesso.

A intenção é ter um módulo no proprio sistema, ou então uma outra aplicação exclusiva para isso, onde um usuario administrador cadastraria toda a estrutura de menus da aplicação (tanto a estrutura principal quanto os submenus) e faria o vinculo dos modulos (aspx) que cada item do menu vai acessar. Posteriormente seria feito o vínculo de permissões para cada usuario do sistema, indicando assim quais itens do menu ficariam visiveis para cada usuário. Isso tudo seria armazenado no banco.

No momento em que o usuario acessar a aplicação, o sistema faria uma consulta SQL no banco e retornaria a estrutura de menu (toda a arvore com o menu principal e submenus) a qual o usuario logado tem acesso.

Dai pra frente basta instanciar isso na tela, num componente asp menu, por exemplo. Ou seja, o menu não seria construido em design time.

A ideia acima, visa, entre outras coisa, eliminar exatamente o uso dos "IFs".

A dúvida é: Depois que o usuário logar e for retornado para o sistema a estrutura de menu que ele tem acesso, qual a melhor forma de manter essa estrutura disponivel para a aplicação, enquanto o usuario estiver logado?
Para o armazenar um dataset com essa estrutura, na sessão do usuario, por exemplo, creio que seja necessário avaliar o consumo de memoria RAM, entre outras coisas. A opção de usar XML ou SITEMAP para armazenar isso fisicamente, talvez implique numa perda de desempenho, não sei.

Essas são minhas dúvidas.

Espero ter sido mais claro.

Mais uma vez obrigado.