2012-03-21 120 views
2

當我正想通過實現自定義角色提供我遇到這兩種方法角色提供者中這兩種方法有什麼區別?

public override string[] GetUsersInRole(string roleName) {} 
public override string[] FindUsersInRole(string roleName, string usernameToMatch) {} 

不是這些同樣的事情來?你提供角色並讓所有在該角色中的用戶回來?實際上,我甚至沒有得到FindUsersInRole中usernameToMatch的用途......我的理解是應該返回多個用戶,但是這不會將它限制爲一個嗎?

回答

2

如果我沒記錯的話GetUsersInRole會得到所有有這個角色的用戶。這是aspnetdb sql查詢其執行:

SELECT u.UserName 
FROM dbo.aspnet_Users u, dbo.aspnet_UsersInRoles ur 
WHERE u.UserId = ur.UserId AND @RoleId = ur.RoleId AND u.ApplicationId = @ApplicationId 
ORDER BY u.UserName 

FindUsersInRole,你送過角色名稱以及用戶名模式。該方法將返回一個匹配用戶名的用戶。這是用於這種方法的aspnetdb sql:

SELECT u.UserName 
FROM dbo.aspnet_Users u, dbo.aspnet_UsersInRoles ur 
WHERE u.UserId = ur.UserId AND @RoleId = ur.RoleId AND u.ApplicationId = @ApplicationId AND LoweredUserName LIKE LOWER(@UserNameToMatch) 
ORDER BY u.UserName 

所以這兩種方法有兩種不同的功能。

+0

那麼FindUsersInRole應該只返回一個用戶?也許是我,但方法名稱和返回類型意味着用戶列表被返回。 – chobo 2012-03-21 19:31:12

+2

FindUsersInRole允許過濾,如'si%',只返回以'si'開頭的用戶。 – sisve 2012-03-21 20:25:53

+0

好的觀察結果--Sql語句中的LIKE可以像西蒙說的那樣使用任何東西,比如%si%。我個人不會發送像這樣的字符串,你是對的,沒有看看誰會知道你可以做到這一點的SQL語句。 – 2012-03-21 23:50:23

相關問題