ユーザーを認証し、ロールを提供するために Com+ コンポーネントを呼び出すシングル サインオンを実装する必要があります。つまり、aspnetdb データベースにアクセスしようとする MVC 4 の既定のメカニズムをバイパスする必要があります。そこで、新しい MVC4 インターネット プロジェクトを開始し、次のコードを追加しました。
Global.asax で
public void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
{
bool retval = CreateUserObject("John", "pwd");
}
private bool CreateUserObject(string userName, string password)
{
string[] currentUserRoles = { "Admin", "User" };
GenericPrincipal userPrincipal = new GenericPrincipal(new GenericIdentity(userName), currentUserRoles);
HttpContext.Current.User = userPrincipal;
//Thread.CurrentPrincipal = userPrincipal;
return true;
}
HomeController.cs 内で、以下のように「About」アクションの [Authorize] 属性を追加したところ、期待どおりに動作しました。
[Authorize]
public ActionResult About()
ただし、[Authorize] 属性を変更して、以下のように「管理者」ロールのみを許可すると、実行時エラーが発生します (下部)。データベースにクエリを実行する代わりに、ログインしているユーザーに独自のロールのコレクションを使用する方法はありますか? また、ユーザー プロファイルと同様の処理を行う必要があります (つまり、データベースの代わりに、Com+ アプリケーションから値を入力する必要があります)。
[Authorize(Roles = "Admin")]
public ActionResult About()
「/」アプリケーションでサーバー エラーが発生しました。
SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバー/インスタンスの検索中にエラーが発生しました)