Простое решение состоит в том, чтобы иметь два узла в вашей карте сайта.
- Один узел отображается для Анонимных пользователей.
- Один узел отображается для Аутентифицированных пользователей с безопасным доступом
Полагаю, вы можете настроить это довольно просто.
Конечный результат аналогичен изменению ссылки, но его легче поддерживать.
Добавить к этому:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode title="Home" url="~/" roles="*">
<siteMapNode url="~/Member.aspx" title="Home" roles="SpecialPeople" />
<siteMapNode url="~/Nonmember.aspx" title="Site Map" roles="HideForUsers" />
</siteMapNode>
</siteMap>
Итак, вы установили правило, запрещающее доступ к роли "HideForMembers
" для аутентифицированных пользователей. Это что-то в этом роде. ASP.NET примет первое правило, которое найдет совпадение, поэтому вы сможете выполнить его следующим образом.
В противном случае вы можете сделать Menu_OnDataBound
и найти узел:
Protected Sub menMainDataBound(ByVal sender As Object, ByVal e As System.EventArgs)
Try
Dim myPage As New Page
Dim myPrincipal As IPrincipal
Dim colNodes As New Collection
myPrincipal = myPage.User
If myPrincipal.Identity.IsAuthenticated = True Then
Dim menNode As MenuItem
For Each menNode In menMain.Items
Select Case menNode.Value.ToString
Case "Products"
colNodes.Add(menNode)
Case "Contact Us"
colNodes.Add(menNode)
Case "About Us"
colNodes.Add(menNode)
Case "Links"
colNodes.Add(menNode)
End Select
Next
For Each menNode In colNodes
menMain.Items.Remove(menNode)
Next
End If
Catch ex As Exception
End Try
End Sub
источник