Menu met Access Control

Installatie van MvcSiteMapProvider via Nuget

 

XML aanpassen om structuur van het menu vast te leggen

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
            xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">


  <mvcSiteMapNode title="Home" controller="Home" action="Index">
    
    <mvcSiteMapNode title="Algemeen" controller="Home" action="Index">
      <mvcSiteMapNode title="Adres Opzoeken" controller="CRAB" action="AdresOpzoeken"/>
      <mvcSiteMapNode title="Post" controller="Home" action="Post_Init"/>
    </mvcSiteMapNode>
    
    <mvcSiteMapNode title="Huisvesting" controller="Huisvesting" action="Index">
      <mvcSiteMapNode title="Attesten" controller="Huisvesting" action="Get_Huisvesting_Attesten"/>
      <mvcSiteMapNode title="Attest - Verzending" controller="Huisvesting" action="Attesten_Post_Opvolging"/>
    </mvcSiteMapNode>
    
  </mvcSiteMapNode>

</mvcSiteMap>

Op controllers toestemming per gebruiker of groep

[Authorize(Users = "STADOCMW\\kenneth,STADOCMW\\samantha,STADOCMW\\stefaan")]
public class FinDienstController : Controller
{
        
    public ActionResult Index()
    {
        return View();
    }
}

of anoniem toestaan

[AllowAnonymous]
public class CRABController : Controller
    {}

In View -> Shared -> Display Templates -> MenuHelperModel.cshtml

@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models

@helper  TopMenu(List<SiteMapNodeModel> nodeList)
{
    foreach (SiteMapNodeModel node in nodeList)
    {
        string url = node.IsClickable ? node.Url : "#";
        // Als er geen sub items zijn, toevoegen als link
        // Else : toevoegen als item maar met dummy link
        if (!node.Children.Any())
        {
            @:<li><a href="@url">@node.Title</a></li>
    }
        else
        {
            @:<li class="dropdown"><a href="#" role="button" class="dropdown-toggle" data-toggle="dropdown">@node.Title <b class="caret"></b></a> @DropDownMenu(node.Children) </li>
    }
        // Als het niet het laatste item is, wordt er een divider toegevoegd
        if (node != nodeList.Last())
        {
            @:<li class="divider-vertical"></li>
    }
    }
}

@helper DropDownMenu(SiteMapNodeModelList nodeList)
{
    @:<ul class="dropdown-menu" role="menu">
        foreach (SiteMapNodeModel node in nodeList)
        {
            string url = node.IsClickable ? node.Url : "#";
            if (!node.Children.Any())
            {
            <li role="presentation"><a role="menuitem" href="@url">@node.Title</a></li>}
        }
        @:</ul>
}
@TopMenu(Model.Nodes)

 

In _Layout.shtml

<ul class="nav navbar-nav">
     @Html.MvcSiteMap().Menu("Menu")
</ul>

 

Categories:

Related Article