アクションを実行するためのリンクが全体にあるサイトがあります。ユーザーが管理者ロールにない場合、一部を非表示にする必要があります。誰かがURLを直接入力した場合などに備えて、バックエンドでチェックしていますが、カミソリビューでこれを持っているだけで十分ですか?
<ul>
<li>Home</li>
<li>Items</li>
@if(User.IsInRole("Admin"){
<li>Users</li>
}
</ul>
アクションを実行するためのリンクが全体にあるサイトがあります。ユーザーが管理者ロールにない場合、一部を非表示にする必要があります。誰かがURLを直接入力した場合などに備えて、バックエンドでチェックしていますが、カミソリビューでこれを持っているだけで十分ですか?
<ul>
<li>Home</li>
<li>Items</li>
@if(User.IsInRole("Admin"){
<li>Users</li>
}
</ul>
ええ、それで十分です。
または、最近使用した別の投稿で見つけたように:
public static MvcHtmlString If(this MvcHtmlString value, bool evaluation)
{
return evaluation ? value : MvcHtmlString.Empty;
}
これを使用できます:
@Html.ActionLink("Create New", "Create").If(User.IsInRole("Admin"))
ただし、他のページへのリンクを使用している場合は、特定の役割以外ではアクセスできないようにする必要があります。また、アクセスを禁止したいコントローラーに Authorize 属性を含める必要があります。
public class HomeController : Controller
{
[Authorize(Roles="Admin")]
public ActionResult Index()
{
return View();
}
}
はい。また、手動呼び出しを防ぐために、コントローラーのそれぞれのメソッドに属性を追加します
[Authorize( Roles = "Admin" )]