2012-04-25 19 views
2

MembershipProvider彼らのユニークな識別子でユーザーを検索する方法asp.net SQLメンバーシップ・プロバイダのIDからロールを取得する方法は?

public abstract MembershipUser GetUser(
    Object providerUserKey, 
    bool userIsOnline 
) 

を持っています。これはデータベースを所有し、あなたのオブジェクトの一部を特定のメンバーシップに関連付ける場合に便利です。

RoleProviderと同じことができますか?役割を一意の識別子にマップする方法や、その逆の方法はありません。

asp.net sqlデータベースに独自のテーブルを追加することをお勧めします。または、独自のオブジェクト用に別のデータベースを用意し、asp.net sqlメンバーシップに外部キーを持たせることをお勧めします。表。

答えて

2

IDから役割を返すためにAPI内の方法はありません - あなたは

Roles.GetAllRoles(); 

を経由してすべての役割を取得することができますまたはあなたが

Roles.GetRolesForUser(userName); 

によってユーザーのすべてのロールを取得することができますしかし、単一の役割ではない。

私は、これが自分自身の役割はおそらくそれほど有用ではないと推測します(少なくとも、マイクロソフトに関する限り)。

もちろん、ロールはデータベース内の単なるテーブルなので、簡単なSQLでこの機能を簡単に追加できます。ちょっとした作業が必要です。

追加データの点で - 私は通常、上記で示唆したように外部キーを使用して同じデータベース内に独自のテーブルを作成します。プロファイルプロバイダ(http://msdn.microsoft.com/en-us/library/0580x1f5.aspx)について聞いたことがない場合でも、それを調べることができます。

0

"asp.net sqlデータベース"のようなものはありません。あなたが指定していなければ、asp.netが作成するデフォルトのデータベースがあります。このデフォルトのデータベースを通常のデータベースから別々に使用する理由はありません。これは接続文字列を持つ理由です。

メンバーシップの全体的なポイントは、柔軟性があり、適切に使用することです。

+0

を –

+0

をアップグレードしながら、私はasp.netは将来のバージョンで自分のデータベーススキーマを変更した場合、私は限られた影響を与えるだろうということだけ心配していました@ parapurarajkumar - すでにデータベーススキーマが変更されています。更新が必要な場合は、データベースに対して変換スクリプトを実行するだけです。それは大したことではありません。 –

0

ログインページでは、Page.User変数はまだ匿名に設定されています。あなたがログインする前に役割を確認したい場合は、次のような独自のGenerpicPrincial構築することができます:

var principal = new GenericPrincipal(
    new GenericIdentity(username), 
    Roles.GetRolesForUser(username)); 
関連する問題