2013-08-20 5 views
11

これは疑問に思うかもしれませんが、管理者だけのリンクを表示するにはどうすればいいですか?ASP.NET MVC5の特定のロールからのリンクを非表示にする

普通のユーザーは、以下のリンクを見ていると仮定します。
ホーム/について/お問い合わせ

をし、adminユーザーは、以下のリンク見ている:私は制限しようとした
ホーム/について/お問い合わせ/管理

をコントローラをメニューにリンクさせます。しかし、それでも誰もがリンクを表示しますが、管理者以外の誰もアクセスできません。

ビューが過負荷になることはありますか?

+0

それだけで非表示にしないのです、あなたはログインユーザの役割を評価しなければならない...この種のに非常に多くの答えがあります質問 –

答えて

30

使用しているメンバーシップ/ユーザーの種類によっては、ユーザーがログインして特定の役割を果たしている場合にのみ、ビューから直接確認することができます。

だから、あなたは何かのようになるでしょう。

@Html.ActionLink("Index", "Home") 
@Html.ActionLink("About", "Home") 
@Html.ActionLink("Contact", "Home") 
@if (User.Identity.IsAuthenticated){ 
    if (User.IsInRole("Admin")){ 
     @Html.ActionLink("Admin", "AdminController")   
    } 
} 

そして、あなたのAdminアクションメソッドに[Authorize]属性を追加することを忘れないでください:

[Authorize(Roles="Admin")] 
public ActionResult Admin() 
{ 
    // ... 
    return View(); 
} 
+1

ユーザーが認証されているかどうかを確認するためのベストプラクティス(または明確性のために)**と**特定の役割を果たしている場合**ですか?私が想像しているように、彼らは彼らが誰であるかをサイトに伝えない限り、それは前の認証を意味するものではありません。私は**選択肢に疑問を呈していません**ただ**疑問に思っています**。私の安全保障のスキルは、飛行中のペンギンのようなものです。 (違いは、怠惰なペンギン、hihiとは異なり、野心的にその状態を変えるために休日を使います。) –

+0

'Authorize'属性は、ユーザーがデフォルトで認証されていることを確認し、オプションでロールを追加できます。 –

+1

ああ、私はそれが分かりませんでした(明らかに、心の読書はあなたの強い側ではない、hehe)。 **最初の**サンプル(CSHTMLファイル、Razorマークアップ)の4行目と5行目を参照しています。 –

関連する問題