1

ユーザーがログインしていないときのリンクがあるサイトマップがありますが、ユーザーがログインすると、リンクが変更されます。たとえば、nonmember.aspxがmember.aspxに変更されます。このサイトマップはasp:menuに関連付けられています。誰かがこれを行う方法を知っていますか?

4

2 に答える 2

1

以下はあなたが探しているweb.configコードです:

<location path="Registration.aspx">
    <system.web>
        <authorization>
            <allow users="?" />
            <deny users="*" />
        </authorization>
    </system.web>
</location>
于 2009-08-23T05:13:06.247 に答える
1

簡単な解決策は、サイトマップに 2 つのノードを含めることです。

  1. 匿名ユーザー 用に 1 つのノードが表示されます。
  2. セキュリティ アクセス権を持つ認証済みユーザーに対して 1 つのノードが表示されます

これは非常に簡単に設定できると思います。

最終的な結果はリンクを変更した場合と同じですが、維持する方が簡単です。

これに追加するには:

<?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それ以外の場合は、 a を実行してノードを探すことができます。

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

ソース

于 2009-07-09T22:33:02.393 に答える