2009-04-29 15 views
6

私は、認証ステータスまたはロールに基づいてビューの特定の部分を表示/非表示にしたいと考えています。私のコントローラのアクションでは、私はActionFilterAttributeを拡張しました。ASP.NET MVCロールベースまたは認証ベースのビューレンダリングの適用方法

<RequiresRole(Role:="Admin")> _ 
Function Action() as ActionResult 
    Return View() 
End Function 

私はビューで使用できる同様の方法(帰)はありますか? (ので、これを好きではない:How can I create a view that has different displays according to the role the user is in?

+1

なぜそれのためにActionFilterATtributeを作成する必要がありましたか? Authorize属性にはRolesパラメーターが使用されます。 –

+0

ああ、右:-) 私はちょうど学ぶために自分自身を作成し​​ました – Ropstah

答えて

6

あなたはこのような観点から、ユーザーのログインしている役割にアクセスすることができます。

public static string DeleteButton(this HtmlHelper html, 
    string linkText, int id) 
{ 
    return html.RouteLink(linkText, 
    new { ID = id, action = "Delete" }, 
    new { onclick = "$.delete(this.href, deleteCompleted()); return false;" }); 
} 
:のようなもので

<% if (Page.User.IsInRole("Admin")) { %> 
     <td> 
      <%= Html.DeleteButton("delete", model.ID) %> 
     </td> 
<% } %> 

と多分あなたの拡張メソッド

明らかに、ページクローラーが誤ってページを取得してデータを削除するのを防ぐため、JavaScriptアクションを使用してHTTPアクションをコントローラアクションに実行しています。私の場合は、HTTP動詞を補うためにdelete()メソッドを使ってJQueryを拡張しています。

+0

いいえ、属性ベースの表示レンダリングを使用することはおそらく不可能です。私はIf文と一緒に行くべきです... Thx – Ropstah

0

私はこれが新しいですが、見つけるのに時間がかかりました。私が使っているものは次のとおりです:

<asp:LoginView runat="server"> 
    <AnonymousTemplate> 
     You are not logged in yet. Please log in. 
    </AnonymousTemplate> 
    <RoleGroups> 
     <asp:RoleGroup Roles="Admin"> 
      <ContentTemplate> 
       You are an Admin. 
      </ContentTemplate> 
     </asp:RoleGroup> 
     <asp:RoleGroup Roles="Customers"> 
      <ContentTemplate> 
       You are a customer. 
      </ContentTemplate> 
     </asp:RoleGroup> 
    </RoleGroups> 
    <LoggedInTemplate> 
     Simple Log in check 
    </LoggedInTemplate> 
</asp:LoginView> 

これにより、ログイン状態や資格情報に基づいて異なるユーザーに異なる内容を表示することができます。

+0

これはWebFormsです。元の投稿はMVCに関するものだと思います。 –

関連する問題