0

以下を含む.net MVC 4 Razorに組み込まれている、私が取り組んでいるクライアントのソリューションがあります。

  1. クライアント ログイン エリアのある公開 Web サイト。
  2. 会社を運営するための非公開会社の Web アプリケーション。ここはウェブサイトのサービスエリアではありません。
  3. これらは個別のアプリです。会社のアプリはサブドメインとして実行されます。
  4. どちらも同じ SQL データベースから実行されます。

問題。各アプリに 1 つずつ、SimpleMembership の個別のインスタンスで終了します。ただし、ロールなどの SimpleMembership で作成される 2 セットの webpages_ テーブルで終了します。私が認識していることから、これらのテーブルの名前を変更することはできません。ユーザーテーブル名を問題なく変更できるので、ユーザーと管理ユーザーを変更できます。代わりに、古い自作のログイン モデルを使用することを考えました。私がやりたいことをするための提案や記事はありますか?

4

1 に答える 1

0

webpages_デフォルトのプレフィックス、または(AFAIK)テーブルが置かれているデータベーススキーマを変更できないため、これを回避する必要があります。

シンプル メンバーシップ プロバイダーは、高度にカスタマイズできるように設計されていますが、そのまま使用すると、独自のプロバイダーを展開するよりも多くの作業を節約できます。したがって、より良いオプションは、それを使用する方法を見つけることであると仮定しましょう. 解決策は次のいずれかです。

  • 2 つのデータベース。また
  • 単一のデータベースで立ち往生している場合は、ロールを使用してユーザーを分離できます。

UserProfile役割を使用する場合の唯一の小さな欠点は、そのクラスでもう少し頑張らなければならないことです。通常、追加のユーザー属性をこのクラスに配置します。2 つのサイトで異なるユーザー属性を使用している場合は、Shared Primary Key Associationsなどを使用して、テーブルを水平に分割する必要があります。

私の見解では、これは実際には、別々のデータベースまたは同じデータベースで 2 つの別々の Simple Membership テーブルのセットを維持するよりも作業が少なくて済みます。「LastLoginAt」などの共有属性はUserProfile(したがって、両方のサイトに共通のライブラリを開発できます)、「InternalExtensionNumber」などのサイト固有の属性は会社のユーザーに固有のパーティション テーブルに入れることができます。

マイナス面は何ですか?誰かがユーザー ロール テーブルへのアクセス権を取得した場合、パブリック ユーザーを割り当てて、プライベート サイトへのアクセス権を取得できます。とはいえ、誰かがユーザー ロール テーブルでそれを行うためのアクセス権を取得した場合、おそらく既に侵害されており、さらに悪化することはありません。

例:

サイト 1 に登録するすべてのユーザーにロール "PublicUser" が与えられ、サイト 2 に登録するすべてのユーザーにロール "AdminUser" が与えられる場合、特定のサイト内で必須のロールを強制することは難しくありません。会社のアプリで承認を必要とするすべてのコントローラーを次のように装飾できます。

[Authorize(Roles = "PrivateUser")]

または、サイト ロールの承認をサイト全体に適用することもできます。これを行うには、属性を使用AuthorizeAttributeてサイト フィルターとして登録し、を使用しAllowAnonymousAttributeてパブリック メソッドへのアクセスを許可します。

// Add this to global.asax.cs to enforce authorization on all controllers.
public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{
  filters.Add(new HandleErrorAttribute());
  //  Add a setting to the web.config to specify the site role, 
  //  and then you can use the same value consistently when
  //  registering users and assigning them a role.
  string siteRole = System.Configuration.ConfigurationManager.AppSettings["SiteRole"];
  filters.Add(new System.Web.Mvc.AuthorizeAttribute() { Roles = siteRole });
}

これ以上のことをしたい場合は、独自の属性を作成し、それをサイトまたはコントローラー レベルで適切に使用することで、authorize 属性を拡張できます。

于 2013-05-20T07:06:25.137 に答える