3

こんにちは私はasp.netmvcWebアプリケーションのマスターページで次のメニューを定義しています

<%Html.RenderPartial("AdminMenu"); %>
<%Html.RenderPartial("ApproverMenu"); %>
<%Html.RenderPartial("EditorMenu"); %>

ただし、ログインしているユーザーの役割に応じて、適切なメニューのみを表示したいと思います。どうすればこれを達成できますか?

私は自分の戦略が間違っていると思い始めているので、同じことを達成するためのより良い方法はありますか?

4

2 に答える 2

8

簡単な例として、これを行うことができます:

<% 
    if (User.IsInRole("AdminRole")
        Html.RenderPartial("AdminMenu"); 
    else if (User.IsInRole("Approver")
        Html.RenderPartial("ApproverMenu"); 
    else if (User.IsInRole("Editor")
        Html.RenderPartial("EditorMenu"); 
%>

または、ユーザーが複数の役割を担っている可能性があります。その場合は、次のようなロジックの方が適切な場合があります。

<% 
    if (User.IsInRole("AdminRole")
        Html.RenderPartial("AdminMenu"); 
    if (User.IsInRole("Approver")
        Html.RenderPartial("ApproverMenu"); 
    if (User.IsInRole("Editor")
        Html.RenderPartial("EditorMenu"); 
%>

または、拡張メソッドを使用した後者のより洗練されたアプローチ:

<% 
    Html.RenderPartialIfInRole("AdminMenu", "AdminRole"); 
    Html.RenderPartialIfInRole("ApproverMenu", "Approver"); 
    Html.RenderPartialIfInRole("EditorMenu", "Editor"); 
%>

public static void RenderPartialIfInRole
    (this HtmlHelper html, string control, string role)
{
    if (HttpContext.Current.User.IsInRole(role)
        html.RenderPartial(control);
}
于 2009-11-17T15:42:29.760 に答える
2

拡張メソッドは、ここに行く方法です。@Joseph よりも一般的には、次のメソッドRenderPartialIfInRoleを使用できます。ConditionalRenderPartial

<% 
    Html.ConditionalRenderPartial("AdminMenu", HttpContext.Current.User.IsInRole("AdminRole")); 
    Html.ConditionalRenderPartial("ApproverMenu", HttpContext.Current.User.IsInRole("ApproverRole")); 
    Html.ConditionalRenderPartial("EditorMenu", HttpContext.Current.User.IsInRole("EditorRole")); 
%>

...

public static void ConditionalRenderPartial
    (this HtmlHelper html, string control, bool cond)
{
    if (cond)
        html.RenderPartial(control);
}
于 2009-11-17T15:58:36.803 に答える