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 属性を拡張できます。