1

私はasp.net Webサイトでいくつかの異なる役割を定義しました:管理者、DefaultUsers。現在、組み込みのプロファイル プロバイダーを使用して、ユーザーに関する情報 (名、姓、アバターなど) を保存しています。次にやりたいことは、「管理者」の役割を持つユーザーに、自分の設定に関するデータを保存することです。(おそらく、EditorType、通知、LogSize ...)。

デフォルトの Profile プロバイダーでできることはありますか? または、カスタム テーブルまたはカスタム プロバイダーを構築し、これらのデータを自分で維持する必要がありますか? 私が欲しいのは、役割ベースのプロファイル プロパティです。どんなアイデアでも大歓迎です!

4

3 に答える 3

0

デフォルトのプロファイルプロバイダーを使用すると、これらの追加の管理者専用プロパティを追加できます。確かにすべてのユーザーが利用できるようになりますが、コードからそれを制御するのは簡単です。

追加の利点として、誰かが一時的に取り消された管理者権限を持っている場合、情報は引き続き保存され、それらを取り戻すときに、古い値はすべてそのまま残ります。もちろん、要件に応じて、それらをクリアすることも、クリアしないこともできます。

他のセキュリティシステムと同様に、ユーザーに特定のプロパティが存在しても、役割/グループメンバーシップを推測することはできないため、user.IsInRole( "Administrators")チェックを実行するようにしてください。

于 2009-07-30T06:39:42.927 に答える
0

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

とにかくそれを行いたい場合は、すべてのユーザーが利用できるが、管理者のユーザーにのみ有効なプロパティの作成を続けることができます。役割のみ。このチェックインコードを実行できます。

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

于 2009-07-30T06:43:57.350 に答える
0

他の回答者がすでに指摘しているように、組み込みの役割ベースのシステムを実際に拡張することはできません。

ただし、現在の ASP.NET メンバーシップとロール プロバイダーを保持し、それらのサービスの恩恵を受け続けるためにできることは、単に aspnet_Roles の拡張テーブルを作成することです。このようなもの:

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

次に、(ApplicationId, RoleId) の aspnet_Roles テーブルへの外部キー関係を確立し、「ロール拡張」テーブルをベース aspnet_Roles テーブルに関連付けることができます。

もちろん、拡張テーブル内の追加フィールドを取得する必要がある場合は、独自のコードでそれを行う必要がありますが、そのようにしても、組み込みの ASP.NET メンバーシップのすべての利点を引き続き使用および活用できます。とロール プロバイダーがあり、汚いハックなどは必要ありません。

マルク

于 2009-07-30T06:50:11.190 に答える