2011-09-02 5 views
7

MVC3のデフォルトインストールでは、Webサイトのタブが左上に作成されます。現在のユーザーがインデックスViewResultにアクセスできるかどうかに基づいて、これらのタブを表示/非表示したいと考えています。 ViewResultに対する許可されるロールは、属性によって定義されます。 ViewResultのロールのリストを取得する方法はありますか?MVC3の属性で定義されたロールに基づいてタブを非表示にする方法は?

+1

あなたの質問はよく説明されていません。 – IamStalker

答えて

10

あなたが求めている場合は(申し訳ありませんが、私には丁度明確ではありませんでした)役割に基づいてHTML要素の条件付き上映について、あなたははこのような何かを行うことができます:それはされていない場合

@if (User.IsInRole("Administrators")) 
{ 
    @Html.ActionLink("Do Some Action", "DoAction", "SomeController") 
} 

をあなたが求めていることは、私に知らせてください。


あなたのコメントに基づいてフォローアップ:

あなたの質問は私に興味、私は周りに少し突きをしたとヴィヴィアン・シュヴァリエは、基本的にあなたがそうのような何かを書くことができます面白いアイデアhereを持っていることがわかりました:

あなたのビューで

@Html.ActionLinkAuthorized("The Privilege Zone", "ThePrivilegeZone", "Home", true)

と、これはコントローラのアクションをチェックして、リンクをレンダリングするかしませんか。彼のコントローラの例では

は、次のようなアクションを持っている:

[Authorize(Roles = "Administrator")] 
public ActionResult ThePrivilegeZone() 
{ 
    return View(); 
} 

(私はここでのキーポイントは、あなたのビューは、「管理者」についてスクワット知らないということで、拡張子に依存していると思いますここに重い物を持ち上げるを行うコード:

public static MvcHtmlString ActionLinkAuthorized(
    this HtmlHelper htmlHelper, 
    string linkText, string actionName, string controllerName, 
    RouteValueDictionary routeValues, 
    IDictionary<string, object> htmlAttributes, bool showActionLinkAsDisabled) 
{ 
    if (htmlHelper.ActionAuthorized(actionName, controllerName)) 
    { 
     return htmlHelper.ActionLink(
     linkText, 
     actionName, controllerName, routeValues, htmlAttributes); 
    } 
    else 
    { 
     if (showActionLinkAsDisabled) 
     { 
     TagBuilder tagBuilder = new TagBuilder("span"); 
     tagBuilder.InnerHtml = linkText; 
     return MvcHtmlString.Create(tagBuilder.ToString()); 
     } 
     else 
     { 
     return MvcHtmlString.Empty; 
     } 
    } 
} 

のではなく、カット/あなたはそれを見て、彼はそのために持っているサンプルアプリケーションを参照することができ、ここでそのすべてのコードを貼り付け、私はこれまで特に興味深い何だと思います。アプローチは、ビューはそのPrivilegeZoneリンクを表示しますが、それがそうであるかどうかを他のものが判断することだけを知っています。したがって、「管理者」または「所有者」であったユーザーだけがリンクにアクセスできるようにするという新しい要件があると仮定すると、コントローラの動作を変更してビューコードに触れないようにすることができます。興味深い考え、少なくとも私に。

+0

ひどく書かれた質問に申し訳ありません。これは、管理者のような役割を宣言するのではなく、アクション属性を介してアクションにアクセス権を与えられた役割のリストを取得することが可能であることを除いて、私が探しているものです。そうすれば、私は属性内の役割を設定することができ、リンクは自動的に表示されます。 – Dale

+0

私の回答に追加した情報が役立つかどうかを確認してください。 – itsmatt

+0

これは非常に役に立ちます。ありがとうございました。 – Dale

関連する問題