3

フォーム認証を使用してログインするときにユーザーに役割を割り当てる方法が説明されているこの記事をフォローしています。

public void Application_AuthenticateRequest( Object src , EventArgs e )
{
   if (!(HttpContext.Current.User == null))
   {
      if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
      {
      System.Web.Security.FormsIdentity id;
      id = (System.Web.Security.FormsIdentity)HttpContext.Current.User.Identity;
      String[] myRoles = new String[2];
      myRoles[0] = "Manager";
      myRoles[1] = "Admin";
      HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
      }
   }
}

役割ロジックをイベントハンドラーに配置したので、基本的に役割プロバイダーは必要ありません。それにもかかわらず、これを実行するには、でロールプロバイダーを有効にする必要があるようweb.configです。悲しいことに、私がちょうど置くならば:

<roleManager enabled="true"/>

AspNetSqlRoleProviderロールプロバイダーとして選択した場合のように、SQLサーバーへの接続の失敗に関連するランタイムエラーが発生します。

このように役割を機能させるにはどうすればよいですか?役割プロバイダーを使用しないことを選択するにはどうすればよいですか、またはダミーのプロバイダーを実装するにはどうすればよいですか(意味がある場合)?

4

1 に答える 1

2

web.configで有効にする必要はありませんroleManager。結局のところ、roleManagerが登場する前は、人々は.NET1.xでロールを使用していました。

roleManagerコードで行っていないことの1つは、に設定Thread.CurrentPrincipalされていHttpContext.Current.Userます。これに依存している場合(たとえば、を使用している場合PrincipalPermissionAttribute)、これを追加する必要があります。

Thread.CurrentPrincipal = HttpContext.Current.User;

そうでなければ、私はそれが機能することを期待します:あなたはそれが機能していないとあなたに思わせるどんな症状を見ていますか?

ダミーの実装に関してはRoleProvider、それは十分に簡単です。たとえば、このMSDNの記事を参照してください。

GetRolesForUserIsInRoleメソッドを実装するだけで済みます。他のメソッドは単にを投げることができますNotSupportedException

于 2012-09-24T13:09:34.153 に答える