2009-07-30 13 views
1

asp.net Webサイトでは、管理者、DefaultUsersという2つの異なるロールを定義しました。現在、私は内蔵プロファイルプロバイダを使用して、ユーザーに関するいくつかの情報(名、姓、アバター...)を保存しています。 私が次にやってみたいのは、自分の好みについてのいくつかのデータを保存するために "推薦者"の役割を持つユーザーを提供することです。 (おそらくEditorType、Notifications、LogSize ...)。asp.netでのロールベースのプロファイルデータProfileProvider

デフォルトのプロファイルプロバイダで実行できることはありますか?または私はカスタムテーブルまたはカスタムプロバイダを構築し、これらのデータを自分自身で管理する必要がありますか? 私が望むものは、ロールベースのプロファイルプロパティです。どんなアイデアも歓迎です!

答えて

0

1つのプロファイルが1人のユーザーにバインドされ、役割にバインドされないため、達成したいことはできません。ユーザーは複数の役割を持つことができますが、複数の役割は持てません。

これをやりたければ、すべてのユーザーが利用できるプロパティを作成することができますが、管理者のみ有効です。役割のみ。コードでこのチェックを行うことができます。

このシナリオでは、ProfileProvidersを使用しないことをお勧めします。この場合、すべてがテキストとして保存され、アプリケーションのパフォーマンスが大幅に低下します。

0

デフォルトのプロファイルプロバイダでは、これらの管理者専用のプロパティを追加できます。もちろん、すべてのユーザーが利用できるようになりますが、コードから制御するだけで十分です。

誰かが管理者特権を一時的に取り消した場合、情報は保存され、元の値はすべて元に戻ります。もちろん、あなたの要求に応じてそれらをクリアすることもできますし、クリアすることもできます。

セキュリティシステムと同様に、特定のプロパティが存在するとロール/グループのメンバシップを推論するべきではないので、あなたのuser.IsInRole( "Administrators")のチェックを行います。

0

他のアンサーが既に指摘しているように、組み込みロールベースシステムを実際に拡張することはできません。

しかし、現在のASP.NETメンバーシップとロールプロバイダを維持し、サービスから利益を得るためには、aspnet_Rolesの拡張テーブルを作成するだけで済みます。このような何か:あなたは、その後(APPLICATIONID、RoleId)にaspnet_Rolesテーブルに外部キー関係を確立するため、ベースaspnet_Rolesテーブルを使用して「役割の拡張子」テーブルを関連付けることができ

CREATE TABLE dbo.MyOwnRoleExtensions 
(ExtensionID INT IDENTITY(1,1) PRIMARY KEY, 
ApplicationId uniqueidentifier, 
RoleId uniqueidentifier, 
(whatever fields you need here......) 
) 

もちろん、エクステンションテーブルの追加フィールドを取得する必要がある場合は、自分のコードで行う必要がありますが、そのようにしても、組み込み関数のすべての使い勝手を引き続き活用できますASP.NETのメンバシップとロールのプロバイダは、あなたは汚いハックや何か必要はありません。

マーク

関連する問題