ASP.NET: Menu com nível de acesso

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.

Por | @oficinadanet Programação

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.

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

ASP.NET: Menu com nível de acesso


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

ASP.NET: Menu com nível de acesso


5. No Solution Explorer, Clique no Web Site e em "Add New Item".

ASP.NET: Menu com nível de acesso


6. Crie um novo arquivo do tipo Site Map.

ASP.NET: Menu com nível de acesso


7. 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:
  
  
  
  
  
</siteMapNode>  
</siteMap>

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?

ASP.NET: Menu com nível de acesso


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

ASP.NET: Menu com nível de acesso


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.

ASP.NET: Menu com nível de acesso


16. 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  
            {   
            }   
        }   
    }   
}

19. Salve tudo e visualize a página novamente, verá que o só irá aparecer um item dessa vez?

Até a próxima!

Mais sobre: .net asp.net menu
Share Tweet
Comentários
Destaquesver tudo
  • ASSINE NOSSA NEWSLETTER

    As melhores publicações no
    seu e-mail

  • Preencha para confirmar