2012-03-21 122 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

相关问题