1

私はMVCSiteMapProvider、v4.6.1を使用しています

これは私の問題です。管理者だけに表示されるメニューのセクションがあります。これを実現するには、セキュリティ トリミングを有効にし、コントローラーやコントローラー メソッドをデコレートしてトリミング基準を定義します。

管理タスク

  • 追加
  • 編集
  • 削除する

私がする必要があるのは、「AdminTasks」ノードをクリックできないようにすることですが、それでも管理者だけに表示されます。

私が観察している動作はclickable="false"、サイトマップのように「AdminTasks」をマークすると、ユーザーが管理者であるかどうかに関係なく、すべての人にノードが表示されるということです。マークされたノードclickable='false'では、セキュリティ トリミングが実行されていないようです。

コードを詳しく調べることなく、ノードが とマークされている場合clickable='false'、SiteMapProvider はルートを解決しようとしないと思います (ナビゲーション目的では必要ないため)。ただし、そうすると、コントローラーの装飾が検査されないため、セキュリティ トリミングがスキップされます。

私の仮定は正しいですか?セキュリティがトリミングされたまま、クリックできないノードを作成する方法はありますか?

ありがとう

4

1 に答える 1

3

クリックできない「グループ化」ノードはコントローラー アクションを表さないため、AuthorizeAttribute を使用してそれらのノードのセキュリティを制御する合理的な方法はありません。

ただし、アクセス可能なノードがネストされていない場合は、TrimEmptyGroupingNodesVisibilityProviderを使用して、クリック不可のノードを非表示にすることができます。したがって、現在のユーザーが「管理タスク」ノードのどの子に対しても権限を持っていない場合、「管理タスク」ノードは非表示になります。

<mvcSiteMapNode title="Admin Tasks" clickable="false" visibilityProvider="MvcSiteMapProvider.TrimEmptyGroupingNodesVisibilityProvider, MvcSiteMapProvider">

これよりも複雑なシナリオがある場合は、独自の可視性プロバイダーを構築することもできます。

于 2014-05-22T14:54:22.377 に答える