В чем разница между этими двумя методами в роли провайдера? - PullRequest
2 голосов
/ 21 марта 2012

В процессе реализации собственного поставщика ролей я столкнулся с этими двумя методами

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

Разве это не одно и то же? Вы предоставляете роль и возвращаете всех пользователей этой роли? На самом деле я даже не понимаю, для чего смысл usernameToMatch в FindUsersInRole ... Насколько я понимаю, он должен возвращать несколько пользователей, но не ограничит ли это одним?

1 Ответ

2 голосов
/ 21 марта 2012

Если я правильно помню, 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

Таким образом, два метода служат двум разным функциям.

...