2011-10-19 3 views
1

私は最大の馬鹿のように感じる - 私はActionResultsだけがクライアントに返されたと思った。このため、コントローラに「ヘルパー」メソッドがロードされていました。MVC私のアプリケーションにおけるセキュリティ上の問題 - ロジックを分離するためのベスト戦略?

URLを使用してアクセスしようとしましたが、私は彼らが到達できるのを見たときにほとんど狂ったと誓っています! ...幸いにも、誰もこれをまだ発見していません。

私は何度も何度も呼び出すことを私が持っているこのような方法の1つは、次のとおりです。

public User GetCurrentUser() 
{  
    User user = db.Users.SingleOrDefault(x => x.UserName == User.Identity.Name); 
    return user; 
} 

私はちょうど私のモデルフォルダ内の「ロジック」というフォルダを作成していると私は、コードを分離しようとしています - Iコード、名前空間などを呼び出すための最良の戦略が何であるか不思議に思っていましたか?

上記の例では、私はControllerから継承するUser.Identity.Nameを使用しています。これを追加すれば、私はステージ1に戻ります!ダーリンディミトロフへ

おかげで、私は今[NonAction]属性について知っている - これらのメソッドを追加すると、/セキュリティ上の問題を修正し、私は必要正確を行い、しかし、これらの方法の多くは、異なるコントローラで使用されていると私は知っています私はコントローラからロジックを分離することができれば最高です。私はそれについての最良の方法が何であるかは分かりません。

私はすべての私の髪を引き出す前に、誰かが正しい方向に私を指すことができます!

+0

これらのヘルパーメソッドは何を使用していますか?あなたはそれらを「私的に」できますか? –

+0

@Graham Clark - 私は可能ですが、複数のコントローラで使用したいさまざまなものがあります...現時点では、コントローラ間でコードを複製しており、それらを長時間私は完全にプライベートではないと確信しています:/ – wil

答えて

3

[Authorize]属性を参照してください。


UPDATE:

それとも[NonAction]属性を使用するか、方法はプライベート作ることができます。しかし、この場合のベストプラクティスは、コントローラからこのロジックを単純に外すことです。コントローラにはコントローラアクションのみが含まれている必要があります。他のロジックは、それぞれの層に配置する必要があります。

+0

私はこれが私が欲しいものであると確信していません - 私は[許可する]これはメンバーだけのためのものですが、これらはアクセスすべきではないメソッドです。** AT ALL **ブラウザからは、他のメソッドしかありません。したがって、私はクラスを分離する必要があることを知っています。最高の戦略を確信していない。 – wil

+1

または 'private'修飾子です。 :) – bzlm

+1

@wilの場合、この場合は '[NonAction]'属性を使うことができます。しかし正直なところ、コントローラーにはコントローラー・アクションだけが含まれているはずです。他に何もない。他のすべてはコントローラに属していないので、コントローラからアプリケーションの対応するレイヤに移動することを強くお勧めします。 –

関連する問題