roleprovider中这两个方法有什么区别?

时间:2012-03-21 19:07:28

标签: asp.net asp.net-membership roleprovider

在我实现自定义角色提供程序时,我遇到了这两种方法

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

这些不一样吗?您是否提供角色并获取该角色中的所有用户?实际上我甚至不知道FindUsersInRole中usernameToMatch的用途是什么...我的理解是应该返回多个用户,但这不会限制它为一个吗?

1 个答案:

答案 0 :(得分: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

因此这两种方法有两种不同的功能。