ポータルのような asp.net Web アプリケーションをゼロから構築したいと考えており、ユーザー管理の標準的な方法として asp.net MembershipProvider を検討していました。SqlMembershipProvider から継承するプロバイダーを作成し、ValidateUser メソッドをオーバーライドします。
public override bool ValidateUser(string username, string password)
{
string temp = ApplicationName;
List<MtscApp> allApps = GetAllApplications();
foreach (MtscApp app in allApps)
{
ApplicationName = app.Name;
Roles.ApplicationName = app.Name;
if (base.ValidateUser(username, password))
{
return true;
}
}
ApplicationName = temp;
Roles.ApplicationName = temp;
return false;
}
入力された資格情報をすべてのアプリケーションに対して検証しようとしていますが、GetAllApplicationsMethod() は aspnet_Applications テーブルからすべてのアプリケーションを取得します (同じテーブルにアプリケーションを挿入するための部分もあります)。
検証が成功した場合、アプリケーション名はメンバーシップ プロバイダーとロール プロバイダーの両方に残されます。それ以外の場合は、匿名ユーザー用に事前定義されたアプリケーションである既定の名前のままになります。