Nesse artigo iremos utilizar o componente de Menu nativo do ASP .NET para criar um menu dinâmico de acordo com o nível de acesso do usuário. Para que isso? Bom, na maioria das aplicações cada usuário tem suas permissões distintas, exemplo: Diretor da empresa e Suporte técnico é lógico que o cara do suporte não vai ter os mesmos acessos do Diretor da empresa.

Nesse artigo iremos utilizar o componente de Menu nativo do ASP .NET para criar um menudinâmico de acordo com o nível de acesso do usuário.Para que isso? Bom, na maioria das aplicações cada usuário tem suas permissões distintas, exemplo: Diretor da empresa e Suporte técnico é lógico que o cara do suporte não vai ter os mesmos acessos do Diretor da empresa.

  1. Para começar crie um novo projeto Web.2. Apague o arquvio Default.aspx.

<a href="https://i1.wp.com/www.leonardohofling.com/blog/wp-content/uploads/2010/05/11.jpg” data-rel="lightbox-image-0” data-rl_title=”” data-rl_caption=”” title="“>

  1. Crie uma MasterPage com o nome de (MasterPage.master).4. Adicione um componente Menu localizado na Toolbox na aba Navigation.

<a href="https://i2.wp.com/www.leonardohofling.com/blog/wp-content/uploads/2010/05/21.jpg” data-rel="lightbox-image-1” data-rl_title=”” data-rl_caption=”” title="“>

  1. No Solution Explorer, Clique no Web Site e em “Add New Item”.

<a href="https://i1.wp.com/www.leonardohofling.com/blog/wp-content/uploads/2010/05/31.jpg” data-rel="lightbox-image-2” data-rl_title=”” data-rl_caption=”” title="“>

  1. Crie um novo arquivo do tipo Site Map.

<a href="https://i1.wp.com/www.leonardohofling.com/blog/wp-content/uploads/2010/05/td_41.jpg” data-rel="lightbox-image-3” data-rl_title=”” data-rl_caption=”” title="“>

  1. Edite esse novo arquivo, você verá que ele possui nós “siteMapNode” e as propriedades que iremos usar serão: url, title, e acesso.8. Deixe o primeiro nó em branco que o nosso menu irá ignorar ele, e crie alguns dentros conforme o exemplo abaixo:

  <siteMap xmlns=”http://schemas.microsoft.com/AspNet/SiteMap-File-1.0″ >  <siteMapNode url=”” title=””  description=””>  <siteMapNode url=”Teste.aspx” title=”Teste”  description=”Teste” acesso=”1″ />  <siteMapNode url=”Teste2.aspx” title=”Teste2″  description=”Teste2″ acesso=”2″ />    

Salve o arquivo e volte para a MasterPage.10. Clique em cima do menu, irá aparecer uma setinha no topo do menu do lado direito.11. Irá aparecer várias opções clica em Choose Data Source e depois em New Data Source?

<a href="https://i0.wp.com/www.leonardohofling.com/blog/wp-content/uploads/2010/05/51.jpg” data-rel="lightbox-image-4” data-rl_title=”” data-rl_caption=”” title="“>

  1. Irá aparecer uma nova janela, selecione Site Map e clique em Ok.

<a href="https://i2.wp.com/www.leonardohofling.com/blog/wp-content/uploads/2010/05/61.jpg” data-rel="lightbox-image-5” data-rl_title=”” data-rl_caption=”” title="“>

13. Deverá existir um componente chamado SiteMapDataSource1 na sua página, clique com o botão direito nele e vá em Properties.14. Muda a propriedade ShowStartingNode para false, para que o primeiro nó do nosso SiteMap não seja mostrado.15. Crie uma nova WebPage e selecione a MasterPage.

<a href="https://i0.wp.com/www.leonardohofling.com/blog/wp-content/uploads/2010/05/td_71.jpg” data-rel="lightbox-image-6” data-rl_title=”” data-rl_caption=”” title="“>

  1. Abra a página Default no Browser e veja o Menu funcionando.17. Volte no VS, vá até a MasterPage, vá até os eventos do Menu e crie o eventos MenuItemDataBound e DataBound.18. Edite sua classe para que fique como o exemplo abaixo:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

public partial class MasterPage : System.Web.UI.MasterPage

{

List itensMenuRemovidos = new List();

protected void Page_Load(object sender, EventArgs e)

{

}

protected void Menu1_MenuItemDataBound(object sender, MenuEventArgs e)

{

try

{

string acesso = ((SiteMapNode)e.Item.DataItem)[“acesso”];

if (acesso == “2”)

throw new Exception(“ERRO”);

}

catch(Exception exc)

{

if (exc.Message.ToUpper() == “ERRO”)

{

itensMenuRemovidos.Add(e.Item.ValuePath);

}

}

}

protected void Menu1_DataBound(object sender, EventArgs e)

{

foreach (String mapaMenu in itensMenuRemovidos)

{

try

{

MenuItem item = Menu1.FindItem(mapaMenu);

if (item.Parent == null)

Menu1.Items.Remove(item);

else

item.Parent.ChildItems.Remove(item);

}

catch

{

}

}

}

}

  1. Salve tudo e visualize a página novamente, verá que o só irá aparecer um item dessa vez? Até a próxima!