当我实现自定义角色提供程序时,我遇到了这两种方法
public override string[] GetUsersInRole(string roleName) {}
public override string[] FindUsersInRole(string roleName, string usernameToMatch) {}
这不是同一个东西吗?您提供一个角色并取回该角色中的所有用户?实际上我什至不明白 FindUsersInRole 中的 usernameToMatch 的意义是什么...我的理解是应该返回多个用户,但这不会将其限制为一个吗?
最佳答案
如果我没记错的话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
因此这两种方法有两种不同的功能。
关于asp.net - RoleProvider 中这两种方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811224/