2009-03-26 7 views
2

申し訳ありませんが、私は愚かな質問をしていることがわかった。しかし、私はasp.netの新人です。私は問題に直面しています。ASP.NET MVCビュー - 何かをベースに表示する承認

私はasp.mvcを学ぶための簡単なブログを書いています。ブログの横にある[編集]リンクを表示したい現在、ModelにcurrentUserオブジェクトを追加し、IsLoggedプロパティをチェックしてEditリンクを表示するかどうかを決定する必要があります。問題は、ログインしているユーザーがいない場合、モデルを他のモデルに挿入して動作させるために偽のcurrentUserを作成する必要があることです。何を求めているのは、これを行うための他のエレガントな方法があるということです。例えば、Controllerの[Authorize]属性を使用して、Actionへのアクセスを許可するかどうかを指定できます。ビューにも同様の方法で適用できますか?

答えて

3

あなたがフォーム認証を使用している場合は、このプロパティはすでに要求オブジェクト内に存在します。

はあなたのビューで

をRequest.IsAuthenticated、あなたはこのような何かをやって、あなたの問題を解決することができます

<% if(this.Request.IsAuthenticated) 
    { 
%> 
    <%= Html.ActionLink("Edit", url - to - action) %> 
<% } 
%> 

実際の問題は、現在のユーザーが現在のブログを編集できるユーザーであることを確認することです。拡張子はそのようなことのようになります

<% if(this.CanEdit(this.User)) 
    { 
%> 
    <%= Html.ActionLink("Edit", url - to - action) %> 
<% } 
%> 

:その場合 、あなたはビューページオブジェクトの拡張メソッドCanEditを行うことができ、あなたの迅速な回答を

public static class ViewExtensions 
{ 
    public static bool CanEdit(ViewPage view, MyUser user) 
    { 
     bool retour = false; 

     if(principal != null) 
     { 
      // get your blog from the view 
      Blog blog = view.ViewData["myBlog"]; 
      // check if the principal is the owner 
      retour = (blog.Owner.Id == user.Id); 
     } 
     return retour; 
    } 
} 
+0

プリンシパルの所在地から説明できますか? if(プリンシパル!= null) –

+0

-principal + user – Mose

0

IsLoggedInモデルのブール値プロパティにします。このようにして、IsLoggedInfalseの場合、CurrentUsernullになります。あなたのビューはIsLoggedInをチェックし、の場合はCurrentUserで何もコールしないでください。このようにして、NullReferenceExceptionが迂回されます。

IsLoggedInプロパティをすべて破棄して、ユーザーがCurrentUser != nullを使用して直接ログインしているかどうかを確認することもできます。

+0

おかげで、しかし、 CurrentUserをモデルに入れる必要のないソリューションがあります。Viewをたくさん持っているとしましょう。ログインユーザーを確認して何かを表示する必要があります。すべてのビューでCurrentUserを返すのは非常にきれいです。 –

+0

そうすれば、MVCモデルを破ることになります。ビューは、レンダリングのためにModelオブジェクト以外のものに頼らざるを得ません。 –

+0

ビューから直接現在のユーザーデータをフェッチしないでください。コントローラーで行う必要があります。ただし、コントローラ内のリクエストをインターセプトするActionFilterを作成し、将来のビューがアクセスする 'ViewData'にCurrentUserを保存することができます。 –

関連する問題