0

サイトマップリンクの一部を非表示にする必要があるタスクが発生しています。たとえば、このサイトマップメニューでは次のようになります。

レストラン

レストランのレビュー

レストランを追加

イベント

イベントの作成

イベントに参加する

管理者

ユーザーの管理

管理ノードは、すべてのユーザーに表示されるべきではありません。

通常のMVCロールセキュリティモデルは使用していません。私たちが持っているのは、すべてのコントローラーの先頭にあるifステートメントです。ユーザーにアクセス権がない場合は、ユーザーを別のページにリダイレクトします。次に例を示します。

    public ActionResult Index(string view)
    {
      if (dao.HasPermission(dao.screenLoanDialogue, dao.PermissionsFull) == false)
      return RedirectToAction("AccessDenied", "Home");
      //rest of code here 
    }

ユーザーがアクセスできないノードをサイトマップに表示しないようにするにはどうすればよいですか?私が試すことができる解決策の1つは、すべてのマップサイトをコントローラーに渡し、表示するノードをコントローラーに処理させることです。しかし、ノードが収集されている場所が見つかりませんでした。

役割とHTMLでのページの記述はオプションではありません。

4

1 に答える 1

2

アクセスを確認するためのいくつかのメソッドを使用してクラスを作成するのはどうですか?

public static class LinkChecker 
{
    public static bool IsAdminLinkAllowed(User userOrWhatever)
    {
        // stuff here
    }
}

次に、ビューで、リンクをレンダリングする前にこれを呼び出します。

@if(LinkChecker.IsAdminLinkAllowed(user))
{
    @Html.ActionLink()
}

または、コントローラーでアクセスを確認し、値をビューに渡すこともできます(おそらくそうする必要があります)。

ViewBag.IsAdminLinkAllowed = LinkChecker.IsAdminLinkAllowed(user);

とビューで:

@if(ViewBag.IsAdminLinkAllowed)
{
    @Html.ActionLink()
}
于 2012-09-26T17:05:46.293 に答える