2012-04-25 68 views
2

MembershipProvider有方法如何從id中獲取asp.net sql成員資格提供程序中的角色?

public abstract MembershipUser GetUser(
    Object providerUserKey, 
    bool userIsOnline 
) 

通過其獨特的標識符來查找用戶。如果你想擁有自己的數據庫並將你的某些對象與某些成員關聯,這很有用。

你能和RoleProvider一樣嗎?似乎沒有任何方法將角色映射到其唯一標識符,反之亦然。

作爲一個側面提示,將自己的表添加到asp.net sql數據庫是一個好主意,還是爲自己的對象創建一個單獨的數據庫並將外鍵添加到asp.net sql成員中表。

回答

2

有API中沒有辦法返回從ID的角色 - 您可以通過

Roles.GetAllRoles(); 

得到的所有角色,或者你可以得到一個用戶的所有角色

Roles.GetRolesForUser(userName); 

但不是一個角色。

我想這是因爲那裏的角色可能沒有那麼有用(至少就微軟而言)。

當然,角色只是數據庫中的一個表格,因此您可以使用一些直接的SQL輕鬆地添加此功能 - 它只需要多一點工作。

就附加數據而言 - 我通常使用外鍵在同一個數據庫中創建我自己的表,如上所述。儘管如果您還沒有聽說過配置文件提供程序(http://msdn.microsoft.com/zh-cn/library/0580x1f5.aspx),您也可能想要查看該配置文件。

0

沒有「asp.net sql數據庫」這樣的東西。如果你沒有指定一個,那麼只需要asp.net爲你創建的默認數據庫。沒有理由在常規數據庫中單獨使用此默認數據庫。這就是爲什麼它有一個連接字符串。

成員資格的要點在於它靈活,只要您認爲合適就可以使用。

+0

我只是擔心,如果asp.net未來版本中改變了自己的數據庫架構我會很有限的影響,同時提升 – 2012-04-25 15:22:01

+0

@ parapurarajkumar - 他們已經改變了他們的數據庫模式。如果您需要更新,您只需針對您的數據庫運行轉換腳本。這不是一個大問題。 – 2012-04-25 15:31:26

0

在登錄頁面上,Page.User變量仍設置爲匿名。如果您想驗證登錄之前的角色,您可以構建自己的GenerpicPrincial這樣的:

var principal = new GenericPrincipal(
    new GenericIdentity(username), 
    Roles.GetRolesForUser(username)); 
相關問題