Изменить ссылку на карте сайта в зависимости от того, вошел ли пользователь в систему? - PullRequest
1 голос
/ 10 июля 2009

У меня есть карта сайта, на которой есть ссылка, когда пользователь не вошел в систему, но когда он выполняет вход, ссылка должна измениться, например, nonmember.aspx должен измениться на member.aspx. Эта карта сайта связана с меню asp :. Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

1 голос
/ 23 августа 2009

Ниже приведен код web.config, который вы ищете:

<location path="Registration.aspx">
    <system.web>
        <authorization>
            <allow users="?" />
            <deny users="*" />
        </authorization>
    </system.web>
</location>
1 голос
/ 10 июля 2009

Простое решение состоит в том, чтобы иметь два узла в вашей карте сайта.

  1. Один узел отображается для Анонимных пользователей.
  2. Один узел отображается для Аутентифицированных пользователей с безопасным доступом

Полагаю, вы можете настроить это довольно просто.

Конечный результат аналогичен изменению ссылки, но его легче поддерживать.

Добавить к этому:

<?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

источник

...