4

可能な限り「本による」MVC4でSimpleMembershipProviderを使用しようとしています。現在のシナリオは次のとおりです。

--私はここのトピックに関するJonGallowayのブログ投稿を使用しています。

1)これはEntityFrameworkを介して配線されていることを認識しています。ただし、UserProfileクラスにプロパティを追加したときに、プロパティが生成されたときにそれらがテーブルに自動的に表示されないことに気付きました。これは、データベースがすでに生成されているためですか(テーブルが存在していませんでした)?フィールドを手動で追加したところ、機能していましたが、フィールドが自動的に作成されない原因となる「落とし穴」を知っておくと便利です。

2)役割に関しては、主にグローバル権限タイプのもの(つまり、ユーザーはユーザー、管理者など)を対象としているようです。プロジェクトレベル(つまり、project1の場合はadmin、project2の場合はuser)で処理できるようにする場合、どのような変更を加える必要がありますか?

など)それを拡張する方法のベストプラクティスに関して本当に詳細に説明されている記事はありますか?

4

1 に答える 1

5

1)Simple Membership の UserProfile テーブル部分が少し複雑だと思いますが (良い意味で)、私のアプリではうまく機能しています。

シンプル メンバーシップの規則は、UserId と UserName の 2 つのフィールドを持つ「UserProfile」という名前の UserProfile テーブルを作成することです。Filters/InitializeSimpleMembershipAttribute.cs の WebSecurity.InitializeDatabaseConnection() 行を変更することにより、UserProfile の別のテーブル名または別の UserId および UserName フィールド名を構成できます。追加のフィールドを使用して UserProfile テーブルを作成できます。これは、Simple Membership が最初に実行されたときにそのテーブルが見つかった場合に、Simple Membership によって使用されます。既定の構成では、アプリで初めて SimpleMembership を実行すると、Filters/InitializeSimpleMembershipAttribute.cs で指定された UserProfile テーブルの詳細を含むデータベース テーブルが作成されます。

そのため、Simple Membership を最初に呼び出す前に、必要な UserProfile テーブル (そのテーブルに必要なすべてのフィールドを含む) を作成するのがコツです。これは、EF 移行によって作成することも、データベース スクリプトによって作成することも、SSMS で手動で作成することもできます。

シンプル メンバーシップのコードを詳しく知りたい場合は、 http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/WebSecurity.csおよびhttp://aspnetwebstack.codeplex.com/を参照してください。 SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/SimpleMembershipProvider.cs .

2) ロールとグローバル権限に関するあなたの指摘に同意します。AddUsersToRoles と RemoveUsersFromRoles ( http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/SimpleRoleProvider.cs内) を使用して、使用するプロジェクトに従ってログイン時のユーザーのロールを変更できます。 .

etc)Simple Membership の拡張に関する良い記事を知りませんが、Simple Membership は原則として、ASP.NET Membership Provider を拡張する Extended Membership Provider を拡張します。適切なポイントでジャンプインできるはずです。

ロバートのコメントに応じて編集:

Entity Framework が UserProfile クラスに追加された列を作成しなかった理由に対する直接的な答えとして、これは、アプリ固有のテーブルの作成が実行される前に、SimpleMembership の初期化によって UserProfile テーブルが既に作成されている場合に発生します。その理由は、SimpleMembership には、SimpleMembership がそのテーブルを作成するたびに使用される UserProfile テーブルの定義が組み込まれているためです。UserProfile テーブルを作成するタイミングは重要であるため、SimpleMembership の初期化が実行される前にアプリ固有のテーブルが作成されていることを確認する必要があります。

于 2013-02-05T17:29:34.323 に答える