2009-07-30 62 views
1

我在我的asp.net網站中定義了幾個不同的角色:管理員,DefaultUsers。目前我使用內置的配置文件提供程序來存儲關於用戶的一些信息(名字,姓氏,頭像...)。 接下來我想做的是提供一個擁有「Admistrators」角色的用戶來存儲一些關於他的偏好的數據。 (可能是EditorType,Notifications,LogSize ...)。在asp.net ProfileProvider中基於角色的配置文件數據

這是可以使用默認的配置文件提供程序完成的事情嗎?或者我是否必須自己構建自定義表或自定義提供者並維護這些數據? 我想要的是基於角色的配置文件屬性。任何想法都歡迎!

回答

0

由於一個配置文件綁定到一個用戶而不是角色,因此您想實現的目標是不可能的。用戶可以有多個角色,但不能有多個配置文件

如果您想要這樣做,您可以繼續創建可供所有用戶使用的屬性,但只對管理員有效。角色而已。您可以在代碼中籤入。

我建議你在這種情況下不要使用ProfileProviders。在這種情況下,所有內容均以文本形式存儲,嚴重影響應用程序的性能。

0

使用默認的配置文件提供程序,您可以添加這些額外的僅限管理的屬性。當然,他們將可供所有用戶使用,但它足夠簡單,可以從代碼中控制它。

作爲一個附加優勢,如果某人暫時吊銷了他們的管理權限,信息仍然會保存,並且當他們將其恢復時,所有舊值仍然存在。當然你可以根據你的要求清除它們。

與任何安全系統一樣,用戶的特定屬性的存在不應該推斷角色/組成員資格,因此請確保您仍然在執行您的user.IsInRole(「管理員」)檢查。

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......) 
) 

然後,您可以建立一個外鍵關係到aspnet_Roles表上(的applicationID,角色ID),因此你的「角色的擴展名」表基表aspnet_Roles關聯。

當然,如果您需要檢索擴展表中的其他字段,則需要在自己的代碼中執行此操作 - 但這樣,您仍然可以使用和利用內置的所有細節ASP.NET會員資格和角色提供商,你不需要任何骯髒的黑客或任何東西。

Marc

相關問題