マルチテナンシー(MVC3、EFを使用)とカスタムSQLメンバーシッププロバイダーについて質問があります。
追加のユーザーベースの属性とともにuserIdをアプリケーションテーブルに含める必要があるため、カスタムのUserおよびRolesメンバーシップクラスを作成しました。現在、これをマルチテナンシーアプリケーションに変換しています。shared-db、shared-appモデルを使用します。テナントの詳細(URLを含む)を格納するマスターテナントテーブルがあり、Tenant_idはすべてのテーブルに含まれています。そして今、私たちはアプリケーション自体の変更に取り組んでいます。
テナントは、tenantUrl.mybaseURL.comのようなURLを使用してログインすることを前提としています。
このアルゴリズムに従って、カスタムのUserValidateメソッドを変更します。
- User goes to URL to login
- The Account controller logon method calls the Custom validate method passing in user/pwd and the tenantId (which has been looked up from the db using the URL).
- The custom validate method checks if the user/password/tenantId combination are valid.
- If valid, we set the tenant Id in a HttpRequest Object and login the user
- For each db access, we lookup the Request object for the tenandId and use that as a filter.
編集:これは私のTenantContextクラスであり、tenantIdを設定/取得します
public class TenantContext
{
public static int TenantId
{
set
{
if (!HttpContext.Current.Items.Contains("tenant-code"))
HttpContext.Current.Items.Add("tenant-code", value);
HttpContext.Current.Items["tenant-code"] = value;
}
get {return HttpContext.Current.Items.Contains("tenant-code") ? Convert.ToInt32(HttpContext.Current.Items["tenant-code"]) : -1; }
}
}
TenantIdは、上記のコンテキストのアカウントコントローラーログインで設定されます。
上記はこれを行うための良い方法ですか、それともより良い方法がありますか?誰かが私が知っておくべきこれに関する問題を見ますか?
ここでAppSettingsに格納されているtenantIdの例を見てきました。マルチテナントサイトでのデータアクセスの処理。これはそれを行うためのより良い方法ですか?
ありがとうございました