2012-03-21 6 views
2

私はこれらの2つの方法roleproviderのこれら2つのメソッドの違いは何ですか?

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

に出くわしたカスタムロールプロバイダを実装して行っていたように、これらは同じものではありませんか?あなたは役割を与え、その役割にあるすべてのユーザーを元に戻しますか?実際に私はFindUsersInRoleのusernameToMatchのポイントが何であるかを知ることさえできません...私の理解は、複数のユーザーを返すべきですが、これは1つに制限しませんか?

答えて

2

私が覚えていれば、GetUsersInRoleは、その役割を持つすべてのユーザーを取得します。

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クエリです。このメソッドは、ユーザー名と一致するユーザーを返します。ここでは、この方法のための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 

だから、2つの方法は2つの異なる機能を果たします。

+0

FindUsersInRoleは1人のユーザーのみを返す必要がありますか?たぶんそれは私ですが、メソッド名と戻り値の型は、ユーザーのリストが返されることを意味します。 – chobo

+2

FindUsersInRoleは、 'si%'のようにフィルタリングすると、 'si'で始まるユーザーのみを返すことができます。 – sisve

+0

良い見解 - sqlステートメントのLIKEは、サイモンが言ったようにsi%や%si%のようなワイルドマッチでさえ取ることができます。私は個人的にそのような文字列を送信しないだろうし、あなたが正しいことを知っているSQLステートメントを見ずに、あなたは正しい。 –

関連する問題