You could do this by implementing you own a site map provide class (that extend
StaticSiteMapProvider
) and based on the user roles to add or not links nodes to you master page. The building of your master page links node based on the user roles have to be done by overriding the method
BuildSiteMap
like in the next example:
private SiteMapNode CreateNode(string key, string title, string url, string description, IList _userRoles)
{
return new SiteMapNode(this, key, url, title, description, _userRoles, null, null, null);
}
protected override void AddNode(SiteMapNode node, SiteMapNode parentNode)
{
base.AddNode(node, parentNode);
_rebuildSiteMap = true;
}
protected override void RemoveNode(SiteMapNode node)
{
base.RemoveNode(node);
_rebuildSiteMap = true;
}
protected override SiteMapNode GetRootNodeCore()
{
return BuildSiteMap();
}
public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
{
return true;
}
public override SiteMapNode BuildSiteMap()
{
if (_rebuildSiteMap)
{
BuildMainSiteMap();
_rebuildSiteMap = false;
}
return _rootNode;
}
SiteMapNode GetRootNode()
{
if (_currentUser == null)
return null;
else if(_currentUser.UserRole == UserRoles.Administrator)
return CreateNode("_root", Resources.Resource.MenuHome, "UserListPage.aspx?Role=2", null, _userRoles);
else
return CreateNode("_root", Resources.Resource.MenuHome, "ComplainListPage.aspx?Type=1", null, _userRoles);
}
private void BuildMainSiteMap()
{
_rootNode = GetRootNode();
if (_rootNode == null)
return;
base.AddNode(_rootNode, null);
SiteMapNode node, subNode;
node = CreateNode("_complainNode",
Resources.Resource.MenuComplains, "ComplainListPage.aspx", null, _userRoles);
base.AddNode(node, _rootNode);
node = CreateNode("_childrenNode",
Resources.Resource.MenuChildren, "ChildListPage.aspx", null, _userRoles);
base.AddNode(node, _rootNode);
node = CreateNode("_casesNode",
Resources.Resource.MenuCases, "CaseListPage.aspx", null, _userRoles);
base.AddNode(node, _rootNode);
if (_currentUser.UserRole == UserRoles.Administrator)
{
node = CreateNode("_protectorsNode",
Resources.Resource.MenuProtectors, null, null, _userRoles);
base.AddNode(node, _rootNode);
subNode = CreateNode("_servicesNode",
Resources.Resource.MenuServices, "ServiceListPage.aspx", null, _userRoles);
base.AddNode(subNode, node);
subNode = CreateNode("_centersNode",
Resources.Resource.MenuCenters, "CenterListPage.aspx", null, _userRoles);
base.AddNode(subNode, node);
subNode = CreateNode("_ongNode",
Resources.Resource.MenuONGs, "ONGListPage.aspx", null, _userRoles);
base.AddNode(subNode, node);
subNode = CreateNode("_familiesNode",
Resources.Resource.MenuFamilies, "FamilyListPage.aspx", null, _userRoles);
base.AddNode(subNode, node);
}
else
{
node = CreateNode("_protectorsNode",
Resources.Resource.MenuFamilies, "FamilyListPage.aspx", null, _userRoles);
base.AddNode(node, _rootNode);
}
}