2

MembershipProviderにはメソッドがあります

public abstract MembershipUser GetUser(
    Object providerUserKey,
    bool userIsOnline
)

一意の識別子でユーザーを検索します。これは、データベースを所有し、自分のオブジェクトを特定のメンバーシップに関連付けたい場合に便利です。

RoleProviderでも同じことができますか? ロールを一意の識別子に、またはその逆にマップする方法はないようです。

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

4

3 に答える 3

2

ID からロールを返す API 内の方法はありません。すべてのロールを取得できます。

Roles.GetAllRoles();

または、ユーザーのすべてのロールを取得できます

Roles.GetRolesForUser(userName);

しかし、単一の役割ではありません。

この理由は、ロール自体はおそらくそれほど有用ではないためだと思います (少なくとも Microsoft に関する限り)。

もちろん、ロールはデータベース内の単なるテーブルであるため、この機能を直接の SQL を使用して自分で簡単に追加できます。もう少し作業が必要です。

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

于 2012-04-25T15:11:27.107 に答える
0

「asp.net sql データベース」のようなものはありません。データベースを指定していない場合は、asp.net が作成する既定のデータベースがあります。この既定のデータベースを通常のデータベースとは別に使用する理由はありません。これが、接続文字列がある理由です。

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

于 2012-04-25T15:19:37.967 に答える
0

ログイン ページでは、Page.User変数は依然として匿名に設定されています。ログイン前にロールを確認したい場合は、次のGenerpicPrincialように独自のロールを作成できます。

var principal = new GenericPrincipal(
    new GenericIdentity(username), 
    Roles.GetRolesForUser(username));
于 2013-03-21T17:14:40.853 に答える