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 認証を使用しています。