6

私はASP.NETWebフォームの5年の経験から来ており、ASP.NETMVCを初めて使用します。私は現在、いくつかのチュートリアル、ビデオチュートリアル、および本でMVCを学習しようとしています。
VisualStudio2012と新しいASP.NETMVC4を使用して、投資信託のポートフォリオを管理するための小さなWebアプリケーションを構築しています。これにより、新しいパターンの内部に入り、多くの新しいことを学ぶことができます...
私のアプリケーションでは、他の友人にも同じことをさせる必要があります。したがって、さまざまなユーザーのポートフォリオを管理する必要があります。
私は最初にEntityFrameworkCodeを使用して小さなDBを構築したので、いくつかの基本的なモデルがあります:ファンド、ポートフォリオ、シェア、デポジット、ソース、ユーザー。1人のユーザーは、多くの資金を含む多くのポートフォリオを持つことができます。各ユーザーは独自の預金リストを持っています。各ファンドには多くの株式価値があります(1日1回)。
ソースモデルは、特定のファンドの株式データのWebサイトソースごとに1つのURLを配置した単なるテーブルです。したがって、1つのファンドには多くのソースがあります。次に、スクレーパークラスを使用して、これらのWebサイトから1日1回データを取得します。
これがアプリケーションの主な構造です。今、私は次のことを行うための最良の方法を知る必要があります。

1)ユーザーのアカウントを管理します
ASP.NETメンバーシップDB構造をDBに統合し、カスタムUserテーブルの代わりにそれを使用してユーザーを管理する必要がありますか?

2)ユーザーコンテンツの管理:ポートフォリオ、資金など 。MVCパターンで最も簡単エレガントな
方法は何ですか。認証とすべての承認検証を実装して、ユーザーが自分のデータを取得できるようにします。すべてのコントローラーのすべてのアクション内でこれを確認する必要がありますか?

つまり、コントローラーをどのように実装する必要があるのでしょうか。例えば:

[Authorize]
public class PortfolioController : Controller
{
    private FundMonitorContext db = new FundMonitorContext();

    public ActionResult Index()
    {
        // Check user ID and give back to the view only his portfolios...

        var portfolio = db.Portfolios.List();
        return View(portfolio.ToList());
    }

    ...

    public ActionResult Details(int id = 0)
    {
        ...
    }

    //Other actions...
}

私は本当にすべての提案をいただければ幸いです!

4

2 に答える 2

0
  1. 自分で選択する必要がありますが、私は独自のメンバーシップ プロバイダーを作成するのが好きで、それほど難しくありません。独自のプロバイダーを使用すると、10 年前に Microsoft がクールだと考えていたものとは異なり、独自の方法で実現できます。例: http://www.codeproject.com/Articles/165159/Custom-Membership-Providers .
    .NET 4.5 では、SimpleMembershipProvider を使用して独自のプロバイダーを作成することがさらに簡単になりました。

  2. [Authorize] 属性を使用して、自動化されたユーザーのみが受け入れられることをコントローラーに伝えます。ユーザーがサインインすると、ユーザー名/ユーザー ID を FormsAuthentication Cookie に入れることができるため、ユーザーのユーザー名/ユーザー ID を非常に簡単に取得できます。さらにデータを入れたい場合は、Cookie に認証チケットを作成することもできます。

    テストを簡単にするために、HttpContext.User と IPrincipal ( http://www.hanselman.com/blog/IPrincipalUserModelBinderInASPNETMVCForEasierTesting.aspx ) の間にバインディングを作成することはほとんどお勧めしません。

于 2012-09-17T13:27:36.147 に答える