0

概要はこちら

  1. メンバーシップを作成する
  2. ロールを作成する
  3. サイトマップの作成 (roles="admin" を使用するように変更)
  4. メニュー スマート タグの新しいデータソースを使用して、メニューを作成し、web.sitemap をメニューにバインドします。
  5. web.config を変更して securityTrimmingEnabled を有効にします

それはこのように動作します。サイトマップのルート ノードにロールを割り当てると、割り当てられているロールを除く他のすべてのロールに対してメニューが正しく非表示になります。

サブメニューの 1 つで役割を使用すると、機能しません。誰かが理由を知っていますか?

web.サイトマップ

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode roles="*"> <--------------- Roles Works here
  <siteMapNode title="Home" url="~/Default.aspx" roles="admin"></siteMapNode> <-------- But not here
<siteMapNode title="Videos" url="~/Tags.aspx" />
<siteMapNode title="Student" url="~/MemberList.aspx" roles="student"/>
<siteMapNode title="My Page" url="~/MyPage.aspx" />
<siteMapNode title="My Recent Views" url="~/RecentViews.aspx" />
<siteMapNode title="Upload a Video" url="~/Upload.aspx" />
  <siteMapNode title="Administer Users" url="~/AdministerUsers.aspx" roles="admin">
      <siteMapNode title="Creat user" url="createUser.aspx"></siteMapNode>
  </siteMapNode>
</siteMapNode>
</siteMap>

web.config ファイル (変更)

<siteMap enabled="true">
    <providers>
        <clear/>
        <add siteMapFile="Web.sitemap" name="AspNetXmlSiteMapProvider" type="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true"/>
    </providers>
</siteMap>
4

1 に答える 1

5

次のリンクを確認してください: http://blogs.msdn.com/b/dannychen/archive/2006/03/16/553005.aspx。ASP.Net のセキュリティ トリミング機能は、最もよく誤解される機能の 1 つです。

基本的な考え方は、セキュリティ トリミングは<authorization>、siteMap のロールではなく、web.config のタグを介して適用されるというものです。サイトマップのロール プロパティは、セキュリティを広げることはできますが、狭くすることはできません。たとえば、~/MemberList.aspx に学生ロール ルールを実際に適用する方法を次に示します。

<location path="~/MemberList.aspx">
  <system.web>
    <authorization>
      <allow roles="Student" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

これにより、リンクがメニューから消えてしまうだけでなく、生徒の役割以外のユーザーがブラウザーに直接 URL を入力したとしても、実際にはページにアクセスできなくなります。タグがなくても、<authorization>常に URL を直接入力してページを表示できます。

于 2011-06-16T14:11:26.840 に答える