2

MSDN は次のように述べています。

ASP.NET MVC ビューへのアクセスを制限するには、ビューをレンダリングするアクション メソッドへのアクセスを制限します。これを実現するために、MVC フレームワークには AuthorizeAttribute クラスが用意されています。

ネストされた部分ビューをロードするアプリケーションを使用しています (適切な用語がないため)

public ActionResult Index(int id)
{
....stuff.....

return PartialView("PartialViewName", model);

}

上記のロードされた部分ビューでは、次のようなネストがあります。

PartialView.cshtml

@Html.Partial("AnotherPartial", Model)
  -@Html.Partial("AnotherPartial_Partial", Model)
    -@Html.Partial("AnotherPartial_Partial_Partial", Model)
@Html.Partial("YetAnotherPartial", Model)
@Html.Partial("StillAnotherPartial", Model)

ある部分ビューへのアクセスを許可し、別の部分ビューへのアクセスを許可したくない場合はどうすればよいですか? これらのパーシャルの特定の要素はどうですか? ボタン、パネル、div、テキストボックスなど...

データベースにユーザーとロールが定義されているので、誰がどの要素/部分ビューにアクセスできるかがわかります。

現在、独自の Html ヘルパーを使用して部分ビューを表示または非表示にしています。

public static MvcHtmlString ShowHidePartial(this HtmlHelper helper, string   partialName, TheUser user)
    {
        bool? isVisible = false;

        //If I don't know who you are or what you are trying to view
        if (user == null || string.IsNullOrEmpty(partialName))
        {
            return MvcHtmlString.Empty;
        }

        if (IsAdmin(user))
        {
            return MvcHtmlString.Create(helper.Partial(partialName).ToString());
        }
        else
        {
            isVisible = IsVisible(partialName, user);
        }

        if (isVisible == true)
        {
            return MvcHtmlString.Create(helper.Partial(partialName).ToString());
        }

        return  MvcHtmlString.Empty;
    }

おそらく、パーシャルをレンダリングするためにこの方法を使い続けるでしょうが、これらのパーシャル内の要素へのアクセス/可視性を制限する方法についてはまだ確信が持てません。

たとえば、ユーザーが AnotherPartial.cshtml にアクセスでき、そのパーシャルに 4 つのセクションがあり、ユーザーが情報 (メンバーの住所、メンバーのステータス、メンバーの電話番号、メンバーの生年月日など) を表示/編集できる場合、すべて update/ボタンを保存します。これらのセクションは、AnotherPartial.cshtml 専用です。

ユーザーに 2 つのセクションの表示 (ReadOnly)、編集 (ReadWrite)、1 つのセクションの完全な非表示 (Hidden?...No Access) のみを許可したいとします。どうすればそれを達成できますか?

アプリケーションへのアクセスに Windows 認証を使用しています。

4

1 に答える 1

0

これらのパーシャルに対応するアクションがあるかどうかはわかりませんが、モデルを何度も再構築する必要がないように、Html.Partial を使用したいようです。あなたの場合に私がすることの1つは、それらのパーシャルを表示したい役割を渡すことです。ビュー内でいくつかのビジネスロジックを提供しているため、これは関心の分離の概念に完全には準拠していないため、この場合は注意が必要です。しかし、あなたはすでにこの道を進んでいるようです。したがって、メソッドを少し拡張するには、次のようにします。 あなたの TheUser クラスには Roles プロパティがあると仮定しています。

public static MvcHtmlString ShowHidePartial(this HtmlHelper helper, string   partialName, TheUser user, string [] roles)
{
            if(roles = null)
            {
                  return MvcHtmlString.Empty;
            }

    //If I don't know who you are or what you are trying to view        
    if(user != null && !string.IsNullOrEmpty(partialName) && user.Roles.Any(r=> roles.Contains(r)) )
    {
        return MvcHtmlString.Create(helper.Partial(partialName).ToString());
    }

    return  MvcHtmlString.Empty;
}

したがって、ビューは次のようになります。

@Html.ShowHidePartial("AnotherPartial", Model, new string[] {"AuthorizedRole1", "AuthorizedRole2"})
  -@Html.ShowHidePartial("AnotherPartial_Partial", Model, new string[] {"AuthorizedRole1"})
    -@Html.ShowHidePartial("AnotherPartial_Partial_Partial", Model, new string[] {"AuthorizedRole1", "AuthorizedRole3"})
@Html.ShowHidePartial("YetAnotherPartial", Model, new string[] {})
@Html.ShowHidePartial("StillAnotherPartial", Model, new string[] {})

オプション 2 役割に基づいてビューを作成します。たとえば、管理ビューが必要とするパーシャルを含む AdminView.cshtml などです。次に、ビジネス ロジック コードで、実行するビューを決定します。これは、ビュー コードの外で完全に発生し、関心の分離の概念に準拠する必要があります。

于 2013-06-01T02:04:09.187 に答える